Javascript刷题 》 查找数组元素位置
找出元素 item 在给定数组 arr 中的位置
输出描述:
function indexOf(arr, item) {
  .....
}
如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1
输入例子:
indexOf([ 1, 2, 3, 4 ], 3)
输出例子:
2
实现方法
1、先将arr转换成字符串,然后使用字符串的indexOf
function indexOf(arr, item) {
  return arr.join("").indexOf(item);
}
2、直接使用数组的indexOf
function indexOf(arr, item) {
  return arr.indexOf(item);
}
3、使用for循环
function indexOf(arr, item) {
  for(let [i,x] of arr.entries()){
    if(x===item)return i;
  }
  return -1;
}
判断当前项是否等于传进来的那一项,如果到最后一项都没有找到,则返回-1
4、使用findIndex方法
function indexOf(arr, item) {
  return arr.findIndex(value=>value===item);
}
5、将传进来的值当做数组分割符
function indexOf(arr, item) {
  var newArr = ("," + arr.toString() + ",").split("," + item + ",");
  if(newArr.length<=1){
    return -1;
  }
  var index = newArr[0].split(",").length-1;
  return index;
}
这个方法虽然复杂了点,但很有趣,会用前面的几个方法顶多算是对api还算了解,但这个更多的是靠编程能力。
其实一开始比较简单的,没有这么复杂,但有个小bug,所有到后面就变的复杂了些,讲一下这题的原理。
如果我们将传进来的值当成一个分割符会是什么效果?
1、先将这个数组转换成字符串
[1, 2, 3].toString(); //1,2,3
2、用传进来的那个值当作字符串分割符,切成数组
function indexOf(arr, item) {
  return arr.toString().split(item);
}
console.log(indexOf([1, 2, 3],2)) //["1,", ",3"]
会被切成两份,而["1,",]的第二位就是我们需要的索引,因此
arr.toString().split(item)[0] //1,
我们再将这个1, 转换成数组,其中的数组长度-1就是我们要的索引。
arr.toString().split(item)[0].split(",").length-1
虽然看似完成了,但还有一些bug得解决,如果没有找到呢?
3、解决如果找不到
怎么知道找不到呢?如果说当前的这个值用做分割后,这个数组的长度和之前的一样长,或者长度为1,那不就是找不到吗,那我们可以这样
function indexOf(arr, item) {
  var newArr = arr.toString().split(item); //如果长度为1说明数组没有被分割掉值
  if(newArr.length<=1)return -1;
  return newArr[0].split(",").length-1;
}
console.log(indexOf([1, 2, 3],5)) //-1
以及完成了一部分了,但还有个bug,一开始没有考虑到的,比如这个数组是一个多位,而查找的值为单个,那么肯定就会出现问题的,如下
console.log(indexOf([12, 2, 3],1)) //0
导致这个结果的问题是,[12,2,3]转换成字符串后是12,2,3将1当作分割符自然能找到12里面的那个1,解决这个问题,就得动点脑了,首先我们需要解决的问题是,防止12被当作1来查找。我们可以在当前这个值前后添加一个值,如下
如查找
12,2,3
我们可以这样
,12,2,3,
也就是说把12给包围住,查找的时候,我们将当前的这个值前后也加上","那么它们就是一个整体了。
因此最后就成了如下的这段代码
function indexOf(arr, item) {
  var newArr = ("," + arr.toString() + ",").split("," + item + ",");
  if(newArr.length<=1){
    return -1;
  }
  var index = newArr[0].split(",").length-1;
  return index;
}
console.log(indexOf([122, 2, 3],12)) //-1
												
											Javascript刷题 》 查找数组元素位置的更多相关文章
- Javascript刷题 》数组求和
		
计算给定数组 arr 中所有元素的总和 输入描述: 数组中的元素均为 Number 类型 输入例子: sum([ 1, 2, 3, 4 ]) 输出例子: 10 解题方法 1.定义一个变量,将前面的和后 ...
 - JavaScript 交换数组元素位置的几种方式
		
前言 交换数组元素位置是开发项目中经常用到的场景,总结下用过的几种方式. 第三方变量 最基础的方式,创建一个变量作为中转. let temp = array[index1]; array[index1 ...
 - LeetCode刷题总结-数组篇(中)
		
本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...
 - LeetCode刷题总结-数组篇(上)
		
数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...
 - LeetCode刷题总结-数组篇(下)
		
本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ...
 - PAT乙级真题1008. 数组元素循环右移问题 (20)
		
原题: 1008. 数组元素循环右移问题 (20) 时间限制400 ms内存限制65536 kB 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M&g ...
 - leetcode刷题记录——数组与矩阵
		
@ 目录 283. 移动零 566. 重塑矩阵 485. 最大连续1的个数 240. 搜索二维矩阵 II 378. 有序矩阵中第K小的元素 645. 错误的集合 287. 寻找重复数 667. 优美的 ...
 - LeetCode刷题总结-数组篇(番外)
		
本期共7道题,三道简单题,四道中等题. 此部分题目是作者认为有价值去做的一些题,但是其考察的知识点不在前三篇总结系列里面. 例1解法:采用数组索引位置排序的思想. 例2解法:考察了组合数学的组合公式应 ...
 - js 数组元素位置互换
		
如下实现的是,先将数组反转,然后将第二个元素与倒数第三个元素位置互换 ,,,,,,,); arr.reverse(); two=arr.splice(,,); three=arr.splice(-,, ...
 
随机推荐
- BestCoder#49
			
Untitled Accepts: 504 Submissions: 1542 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/6 ...
 - css3控制标题字数超出的部分自动显示为“...”省略号
			
css3功能强大,可以让超出指定宽度的部分自动显示为"..." 代码如下 display:block;text-overflow:ellipsis;white-space:nowr ...
 - Git小记
			
Git简~介 Git是一个分布式版本控制系统,其他的版本控制系统我只用过SVN,但用的时间不长.大家都知道,分布式的好处多多,而且分布式已经包含了集中式的几乎所有功能.Linus创造Git的传奇经历就 ...
 - Python开发工具PyCharm个性化设置(图解)
			
Python开发工具PyCharm个性化设置,包括设置默认PyCharm解析器.设置缩进符为制表符.设置IDE皮肤主题等,大家参考使用吧. JetBrains PyCharm Pro 4.5.3 中文 ...
 - 39个让你受益的HTML5教程
			
1. 五分钟入门HTML5 (Learn HTML5 in 5 Minutes!) By Jennifer Marsman 毫无疑问,HTML5是一个热门话题.如果你需要一个迅速了解HTML基础的速成 ...
 - php 迭代器使用
			
/** * 执行入口 * @author tianyunchong * Time: 4:48 pm * @return null */ public function run() { /** 遍历下所 ...
 - Hive_配置远程Metastore
			
注 : 待测试 一.准备两三台linux机器,最好是hadoop集群环境 机器A:10.0.0.2 机器B:10.0.0.3 机器C:10.0.0.4 二.个机器安装信息 机器A安装mysql(用于存 ...
 - 关于英语PETS5备考的一些事
			
首先,自我介绍一下,我叫万世想,目前国内某985高校CS硕士在读,在现代软件工程课上,接触到了博客园,之前是自己在新浪云上用WP简单搭了自己的博客,但是都没有坚持下来.希望自己能够在博客园大家庭中,与 ...
 - HDU---BigZhuGod的粉丝
			
Problem Description 真正的粉丝,是不需要题目描述的^_^. Input 第一行输入数据组数T(1≤T≤100).接下来T行,每行一个有格式的字符串,详见样例,字符串长度不超过1 ...
 - xml中DTD解析
			
DTD的作用是"文档类型的定义" DTD申明始终以<!DOCTYPE开头(开头后空一格). 本标签一共有三种写法 一.内部DTD: <!DOCTYPE 根元素 [ 文档 ...