JavaScript 数组怎么判断包含

家里买了满满一筐水果,想看看有没有自己最爱的草莓;整理书包时,要确认作业本里有没有落下数学练习册——这些生活里的“找东西”小事,放到电脑编程里,就变成了“判断一个数组里有没有某个元素”的问题。JavaScript作为网页开发的常用编程语言,这个功能是高频刚需,今天就用大家熟悉的场景,把它讲明白。

最省心的“查清单”:includes() 方法

如果你的需求是“只需要知道有没有这个东西,不用管它在哪个位置”,那用 includes() 方法就像翻购物清单找商品,是最省心的选择。它的逻辑很简单:把要找的内容直接“塞”给它,它会老老实实告诉你“有”或者“没有”。

JavaScript 数组怎么判断包含

举个生活化的例子:你和朋友约好去吃火锅,提前列了爱吃的菜品数组:const hotPotato = ['肥牛卷', '娃娃菜', '虾滑', '毛肚']。现在想知道有没有毛肚,就写 hotPotato.includes('毛肚'),电脑会返回 true(代表有);如果想找“金针菇”,写 hotPotato.includes('金针菇'),会返回 false(代表没有)。

这个方法还有个小细节:如果数组里有重复元素,它只要找到第一个匹配的就会停,不用挨个找完,效率很高。不过要注意,它认“一模一样”的东西——比如数组里是数字 123,你找字符串 '123',它会认为是不一样的,这点要记清楚。

要位置的“查坐标”:indexOf() 和 lastIndexOf()

有时候你不仅想知道“有没有”,还想知道“在第几个”,这时候 indexOf() 和 lastIndexOf() 就派上用场了,相当于给数组里的每个元素编了号(从0开始数,不是1哦),返回的就是目标元素的编号。

还是用火锅清单举例:hotPotato.indexOf('娃娃菜') 会返回 1,因为娃娃菜是数组里的第2个元素,编号是1。如果目标元素有重复,比如把 ['毛肚', '虾滑', '毛肚'] 放进数组,indexOf('毛肚') 会返回 0,也就是第一个毛肚的编号;如果想找最后一个毛肚,就要用 lastIndexOf('毛肚'),返回 2。

最关键的判断技巧来了:如果 indexOf() 返回的是 -1,就说明数组里根本没有这个元素。比如你找 鱼豆腐,hotPotato.indexOf('鱼豆腐') 会返回 -1,这就是判断“不存在”的信号。这个方法虽然多了一步看返回值,但胜在兼容性好,老版本的浏览器也能正常用。

怕漏的“挨个查”:find() 和 findIndex()

如果你的目标元素有点“特殊”——不是刚好等于某个值,而是需要满足某个条件,这时候 find() 就像挨个翻零食袋,只要找到符合要求的就拿出来。比如你想找“重量超过100克的零食”,不是找“某一个具体的零食名”,这时候 includes() 和 indexOf() 就不好用了。

举个例子:你整理零食筐,数组是 const snacks = [{name: '薯片', weight: 150}, {name: '饼干', weight: 80}],想找重量超过100克的零食。用 find(snack => snack.weight > 100),它会返回第一个符合条件的对象 {name: '薯片', weight: 150};如果没找到,就返回 undefined。对应的 findIndex() 就是返回这个元素的编号,比如刚才的例子返回 0,没找到就返回 -1。

不过要注意,find() 只返回第一个符合条件的元素,如果你需要所有符合条件的,得用另一个方法 filter(),不过它是用来“筛选”不是“判断”,这里就不多说了。

选哪个?看需求定

最后总结一下,不用死记硬背,选方法看你要什么:只是判断“有没有”,用 includes() 最省心;需要知道位置,用 indexOf() 或 lastIndexOf();要按条件找元素或位置,就用 find() 或 findIndex()。就像找东西,找具体的东西用清单,找符合要求的东西挨个翻,选对方法,编程就没那么难啦。

上一篇 PHP 如何写 curl 请求