Array.indexOf() 学习

IndexOf查找元素索引,直接使用即可。

arr.indexOf(您要查找的数字)。
-1 如果没有找到。

例如,[1 ,2 ,3 ].indexOf(2 ) 返回 1 默认情况下,搜索从 0 开始。

您想从哪里开始搜索?第二个参数指定下标。
例如,从索引2 开始搜索。

负索引从末尾开始计数。
但它仍然会先移动。
相当痛苦。

我上周才完成了一个程序。
使用负索引时要注意不要写错位置。

js 如何用indexOf查找数组中元素的索引

一般来说,在 JavaScript 中使用 indexOf 查找数组元素的索引时需要执行三件事:首次检查、全部检查和观察 NaN。

我们先来说最重要的一点,indexOf有它自己的雪崩效应——使用时不要忽略fromIndex参数。
去年我们跑了一个电商项目,其中一个需求是“从用户上次浏览的位置继续推荐”,但是不匹配。
然后,我们发现fromIndex没有设置为当前用户最后查看的页码。
还有一点就是indexOf对类型有严格的要求。
例如,在混合数组 [1 , '2 ', 3 ] 中,indexOf(2 ) 直接返回 -1 ,因为那个行话叫做类型提升陷阱,字符串 '2 ' 和数字 2 根本不是一回事。
还有一个更重要的细节。
例如,当搜索 NaN 时,indexOf 会被卡住,因为 NaN 是唯一不等于其自身的值。
去年我们几乎将其写入计时器循环中,直到我们发现 findIndex+isNaN 是正确的解决方案。

老实说,这有点令人困惑,但是等等,还有一件事——使用indexOf查找所有匹配索引时,不要自己写无限循环,3 000级数据会直接阻塞CPU。
然后我们改用reduce+Array.prototype.fill,性能明显提升。

最后警告:使用indexOf搜索对象数组会导致错误。
例如,在 [{id:1 }, {id:2 }] 中,indexOf({id:1 }) 始终返回 -1 ,因为这比较的是引用而不是值。
目前,findIndex函数+回调是正确的方式。

js中indexof的用法详细解析

说白了,IndexOf就是查找某个字符或子串在字符串中第一次出现的位置。
它非常容易使用。

基本功能只有一个:你要找哪个字符串,你要找什么。
例如,如果有一个字符串“Hello World”,想要找到“World”第一次出现的位置,可以使用indexOf。

有三个参数:第一个是要查找的字符或字符串,第二个是要查找的位置,默认值是0。
第三个是检查有多少个字符,但说实话,标准JavaScript中不需要这个东西。
在某些特殊环境下可能会支持,但一般不使用。

返回值只有两个:如果找到,则返回索引号。
如果没有找到,则返回-1 请注意,它返回 -1 而不是 1
用例:例如,如果您有一个字符串 str1 并且想要查找“a”首先出现的位置,只需编写 str1 .indexOf(“a”)。
如果找到“hello world”中“world”的位置,写成str1 .indexOf(“world”),返回值为6
很容易从特定位置开始查找。
例如,如果要从第3 个字符开始搜索“a”,只需编写str1 .indexOf(“a”, 3 )。

有两点需要注意:首先,区分大小写,“A”和“a”是两个不同的东西。
其次,不要使用非标准的计数参数,这样容易出错。

更复杂的搜索?只需使用正则表达式即可。

实际上,indexOf 非常方便。
这是在字符串中查找内容的基本操作。

js数组去重(4种方法)

说起JS数组去重,这个问题我已经遇到过很多次了。
我记得有一次我在做一个项目,它炸毁了一个包含大量重复数据的巨大数组。
当时我尝试了四种方法,每种方法都失败了。
现在我将告诉你这件事。

首先说第一种方法,使用set去重。
那件事很简单,而且我觉得它和我看到的一样安全。
只需使用 Set ,将数组中的对象放入其中,并自动删除重复项。
我觉得这个方法很酷,但是我意识到,咳咳,它不能保持原始数组的顺序。
当时我就觉得项目中的顺序非常重要,但这是不可能的。

然后,我尝试了第二种方法,双遍法。
该方法逻辑简单,一目了然。
当时我写了一个两层循环,一层循环查找元素,另一层循环查找重复项。
我当时很自豪,觉得非常有效。
因此,一旦开始跑步,速度就非常慢。
当时我就想,对于这么大的数据量,这个方法肯定行不通。

接下来,我使用第三种方法(indexOf 方法)来删除重复项。
我当时觉得这个方法很简单。
为了找到每个元素第一次出现的位置,需要遍历数组并使用indexOf。
然后,如果该位置不是第一个,则将其复制并删除。
当时觉得很方便,但是运行起来发现要遍历两次数组,效率不是很高。

最后我尝试结合第四种方法,过滤方法加条件判断来消除重复。
这个方法的代码非常简单,当时我认为是非常先进的。
但问题是你得了解过滤器的逻辑和条件判断。
当时我花了很长时间才弄清楚。
虽然终于完成了,但心里还是有点不舒服。
总而言之,这四种方法都有其自身的缺陷。
如果你的数据量不大,使用Set去重是很容易的;如果数据量很大,又想保持顺序,可能就得另想办法了。
当时我根据项目的需要选择了最合适的还原方式。
回顾使用Set是最快、最简单的去重方法,但有时,你必须根据实际情况选择合适的方法。
我在这方面经历过很多陷阱。
哈哈,希望这篇分享可以帮到你。