js 怎样用includes判断数组是否包含某元素

include() 方法直接判断数组是否包含给定值并返回 true 或 false。

语法很简单:array.includes(你要找的值,从哪个索引开始找)
例如: myArray.includes(3 ) // true myArray.includes('orange') // false
注意: 1 .比较严格,如果类型不匹配则为false。
myArray.includes(3 ) // false,因为数字 3 不等于字符串 '3 '
2 include可以处理NaN,但indexOf不能 myArray.includes(NaN) // true
3 . fromIndex 即使是负数也可以从后向前搜索 myArray.includes(4 , -2 ) // true,从索引 3
4 开始查找。
稀疏数组中间有一个空槽,include(undefined) 返回 true
5 兼容性问题,老浏览器不支持,改用indexOf
总结: 使用includes进行简单判断。
使用indexOf与旧版本兼容 对于复杂的情况使用 find/findIndex

ES6 查找js数组中是否包含某个key-value,可在任意嵌套层数中查找

直接上代码,用大白话解释一下:
javascript 导出函数 deepFind(数据, 键, 值) { if (Array.isArray(data)) { for (const 数据项) { if (deepFind(item, key, value)) 返回 true; } 返回假; } if (数据 && 数据类型 === '对象') { if (data[key] === value) 返回 true; if (data.children && Array.isArray(data.children)) { 返回 deepFind(data.children, key, value); } } 返回假;
严格来说,是递归遍历。
有两种情况:
1 .数组:逐元素递归查找。
如果找到则返回 true。
2 . Object:检查当前键值对是否匹配。
如果匹配则返回 true。
然后检查子属性(如果存在并且是一个数组),并迭代子结构。

重要内容:
双重处理:数组直接递归,对象首先检查当前对象,然后迭代子对象。

短路逻辑:找到就返回,不再继续遍历。

边界检查:子级必须是数组才能递归。

上周我刚刚解决了一个复杂的hive问题,这个功能非常高效。
例如:
javascript 常量嵌套数据 = [ { id: 1 , 组件: "layouts/BasicLayout", 子组件: [...] }, { id:4 ,组件:“布局/UserLayout” } ]; console.log(deepFind(nestedData, "组件", "布局/RouteView")); // 正确
如果您需要收集所有匹配项,使用生成器会更容易:
javascript 函数 deepFindGenerator(数据,键,值){ if (Array.isArray(data)) { for (const 数据项) { 生成 deepFindGenerator(item, key, value); } } if (数据 && 数据类型 === '对象') { if (data[key] === value) 产生数据; if (data.children) 产生 deepFindGenerator(data.children, key, value); }
该生成器可以在所有比赛中保持移动。
你试试吧。

js如何判断数组是否包含某元素

结论:
简单的值查找:使用 include()
与旧环境兼容:使用indexOf()
复杂对象或条件:使用 find()、findIndex() 或 some()
精确控制遍历:使用传统循环
需要权衡性能和兼容性来选择最合适的工具。