找出元素 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

转载于:https://www.cnblogs.com/pssp/p/6130883.html

Javascript刷题 》 查找数组元素位置相关推荐

  1. 【小米校招笔试】一个数组是由有序数组经过n次循环移动后所得,请你用最快速度查找某个元素位置

    2016年小米校招笔试第二题(西安站) 2 现有一个数组是由有序数组经过n次循环移动后所得,请你用最快速度查找某个元素位置(如1234568,向右移动3次后为67812345). 参考解法(Java版 ...

  2. [JavaScript 刷题] Code Signal - 相似数组(Are Similar?)

    [JavaScript 刷题] Code Signal - 相似数组(Are Similar?) 题目地址:Are Similar? 题目 如下: Two arrays are called simi ...

  3. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总

    DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...

  4. 5月28日刷题笔记——数组

    5月28日刷题笔记--数组 题目1:1. 两数之和(简单题) 第二次做这题了,一直用的双循环暴力枚举. 这里参考题解的哈希表方式复现代码: class Solution {public:vector& ...

  5. ZZULIOJ 1117: 查找数组元素

    查找数组元素 题目描述 输入n个整数构成一个数组,在这个数组中查找x是否存在,如果存在,删除x,并输出删除元素后的数组.如果不存在,输出"Not Found". 定义一个查找函数f ...

  6. [JavaScript 刷题] 搜索 - 腐烂的橘子, leetcode 994

    [JavaScript 刷题] 搜索 - 腐烂的橘子, leetcode 994 唉--之前写过笔记总结的问题,还是又卡住了. 自挂东南枝-- 题目地址: Rotting Oranges 题目如下: ...

  7. 算法设计——用分治法查找数组元素的最大值和最小值、用分治法实现合并排序、最小费用问题、树的最大连通分支问题(代码实现)

    代码链接:pan.baidu.com/s/15inIth8Vl89R1CgQ_wYc2g  提取码:gf13 算法分析与设计第 1 次实验 时间 2020.3.31 地点 软件大楼 127 实验名称 ...

  8. [python] 分治法查找数组元素的最大值和最小值

    分治法查找数组元素的最大值和最小值 分治法简介: 分治法从字面上的解释是"分而治之",就是把一个复杂的问题分成两个或者更多相同或者相似的子问题,再把子问题分成更小的子问题,直到最后 ...

  9. c语言二分法查找数组元素,c语言二分法如何实现查找数组元素

    c语言二分法实现查找数组元素的方法:1.递归算法,代码为[if(a[mid] == key) return mid]:2.非递归算法,代码为[while( left < right && ...

最新文章

  1. ASP.NET之对称算法加密
  2. matplotlib全图
  3. poj 1033 Defragment
  4. Design Pattern Explained 读书笔记二——设计模式序言
  5. PHP中添加HTML代码的三种方法(printEND)
  6. 疾病相关数据查找,Our world in data使用指南
  7. 运维角度浅谈MySQL数据库优化(转自:2018-03-10 李振良 JAVA高级架构)
  8. 电脑壁纸励志_励志文案丨关于学习的文案,大家加油!
  9. webpack2.x 中文文档 翻译 之 出口Output
  10. 区分基于Ant目标的Gradle任务
  11. php task todolist,Todolist--(4)登录
  12. PBFT 算法原理简介
  13. 商业医疗险住院报销需要什么材料?
  14. Spark Streaming实现WordCount
  15. 小心中中国移动“短号集群网”的招
  16. Intel Edison学习笔记(一)—— 刷系统
  17. FastFDS分布式文件系统
  18. 网桥(Bridge)作用详解
  19. 量化交易入门,看这篇就够了
  20. 【Python量化】 Scipy库求解最优资产投资组合

热门文章

  1. Linux系统下统计目录及其子目录文件个数
  2. 射频放大器芯片3阶截点计算与芯片选择
  3. “不亦乐乎”是“乐”还是“悦”?
  4. 妹妹生了个女儿,纪念一下
  5. keras神经网络回归预测_如何使用Keras建立您的第一个神经网络来预测房价
  6. meetup_如何使用标准库和Node.js构建Meetup Slack机器人
  7. JavaScript的“ this”通过成立一个高中乐队来解释
  8. 溢出内容菜单_停止过度使用溢出菜单
  9. Python 第三方库自动安装脚本
  10. 参加UI培训后可以找什么工作