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
转载于:https://www.cnblogs.com/pssp/p/6130883.html
Javascript刷题 》 查找数组元素位置相关推荐
- 【小米校招笔试】一个数组是由有序数组经过n次循环移动后所得,请你用最快速度查找某个元素位置
2016年小米校招笔试第二题(西安站) 2 现有一个数组是由有序数组经过n次循环移动后所得,请你用最快速度查找某个元素位置(如1234568,向右移动3次后为67812345). 参考解法(Java版 ...
- [JavaScript 刷题] Code Signal - 相似数组(Are Similar?)
[JavaScript 刷题] Code Signal - 相似数组(Are Similar?) 题目地址:Are Similar? 题目 如下: Two arrays are called simi ...
- DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总
DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...
- 5月28日刷题笔记——数组
5月28日刷题笔记--数组 题目1:1. 两数之和(简单题) 第二次做这题了,一直用的双循环暴力枚举. 这里参考题解的哈希表方式复现代码: class Solution {public:vector& ...
- ZZULIOJ 1117: 查找数组元素
查找数组元素 题目描述 输入n个整数构成一个数组,在这个数组中查找x是否存在,如果存在,删除x,并输出删除元素后的数组.如果不存在,输出"Not Found". 定义一个查找函数f ...
- [JavaScript 刷题] 搜索 - 腐烂的橘子, leetcode 994
[JavaScript 刷题] 搜索 - 腐烂的橘子, leetcode 994 唉--之前写过笔记总结的问题,还是又卡住了. 自挂东南枝-- 题目地址: Rotting Oranges 题目如下: ...
- 算法设计——用分治法查找数组元素的最大值和最小值、用分治法实现合并排序、最小费用问题、树的最大连通分支问题(代码实现)
代码链接:pan.baidu.com/s/15inIth8Vl89R1CgQ_wYc2g 提取码:gf13 算法分析与设计第 1 次实验 时间 2020.3.31 地点 软件大楼 127 实验名称 ...
- [python] 分治法查找数组元素的最大值和最小值
分治法查找数组元素的最大值和最小值 分治法简介: 分治法从字面上的解释是"分而治之",就是把一个复杂的问题分成两个或者更多相同或者相似的子问题,再把子问题分成更小的子问题,直到最后 ...
- c语言二分法查找数组元素,c语言二分法如何实现查找数组元素
c语言二分法实现查找数组元素的方法:1.递归算法,代码为[if(a[mid] == key) return mid]:2.非递归算法,代码为[while( left < right && ...
最新文章
- ASP.NET之对称算法加密
- matplotlib全图
- poj 1033 Defragment
- Design Pattern Explained 读书笔记二——设计模式序言
- PHP中添加HTML代码的三种方法(printEND)
- 疾病相关数据查找,Our world in data使用指南
- 运维角度浅谈MySQL数据库优化(转自:2018-03-10 李振良 JAVA高级架构)
- 电脑壁纸励志_励志文案丨关于学习的文案,大家加油!
- webpack2.x 中文文档 翻译 之 出口Output
- 区分基于Ant目标的Gradle任务
- php task todolist,Todolist--(4)登录
- PBFT 算法原理简介
- 商业医疗险住院报销需要什么材料?
- Spark Streaming实现WordCount
- 小心中中国移动“短号集群网”的招
- Intel Edison学习笔记(一)—— 刷系统
- FastFDS分布式文件系统
- 网桥(Bridge)作用详解
- 量化交易入门,看这篇就够了
- 【Python量化】 Scipy库求解最优资产投资组合
热门文章
- Linux系统下统计目录及其子目录文件个数
- 射频放大器芯片3阶截点计算与芯片选择
- “不亦乐乎”是“乐”还是“悦”?
- 妹妹生了个女儿,纪念一下
- keras神经网络回归预测_如何使用Keras建立您的第一个神经网络来预测房价
- meetup_如何使用标准库和Node.js构建Meetup Slack机器人
- JavaScript的“ this”通过成立一个高中乐队来解释
- 溢出内容菜单_停止过度使用溢出菜单
- Python 第三方库自动安装脚本
- 参加UI培训后可以找什么工作