Javascript刷题 》 查找数组元素位置
2016-12-04 15:18
316 查看
找出元素 item 在给定数组 arr 中的位置
输出描述:function indexOf(arr, item) { ..... }
如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1
输入例子:
indexOf([ 1, 2, 3, 4 ], 3)
输出例子:
2
实现方法
1、先将arr转换成字符串,然后使用字符串的indexOffunction 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的数组中进行数组元素查找和替换(JS的indexOf等)
- javascript 常见数组操作( 1、数组整体元素修改 2、 数组筛选 3、jquery 元素转数组 4、获取两个数组中相同部分或者不同部分 5、数组去重并倒序排序 6、数组排序 7、数组截取slice 8、数组插入、删除splice(需明确位置) 9、数组遍历 10、jQuery根据元素值删除数组元素的方)
- 2017/12/31Java基础学习——查找数组元素位置のArrays.binarySearch()方法介绍
- 二分查找最后一个小于等于和第一个大于等于某对象的数组元素位置
- js查找数组元素位置
- JS能力测评-查找数组元素位置
- 查找数组元素位置
- 在JavaScript的数组中进行数组元素查找和替换(JS的indexOf等)
- 查找数组元素位置
- js查找数组元素位置
- 查找数组元素位置
- javascript之查找数组元素
- JS编程训练 | 题1:查找数组元素位置
- javascript 数组两个扩展:查找值的索引位置,删除指定索引位置的成员
- javascript中indexOf()和lastIndexOf()查找字符串位置
- javascript中indexOf()和lastIndexOf()查找字符串位置
- JS编程:查找数组元素位置
- 查找存储过程中的错误位置