如何检测JavaScript二维数组中是否存在book值为"C"的对象?
检查二维数组中是否存在book属性值为"C"的对象
嘿,这个问题不难解决,咱们一步步来~你的数组是嵌套结构:外层是一个数组,里面又包含了子数组,子数组里是带book属性的对象。下面给你几种实用的实现方式:
方法一:嵌套使用Array.some()(最推荐)
这是效率最高的写法,因为some()方法会在找到第一个符合条件的元素后立刻停止遍历,不用浪费资源遍历整个数组:
var test = [[{book:"A"}, {book:"B"}]]; const hasBookC = test.some(innerArray => { return innerArray.some(item => item.book === "C"); }); console.log(hasBookC); // 示例里没有"C",所以输出false
简单解释:
- 外层的
test.some()遍历外层数组的每一个子数组 - 内层的
innerArray.some()遍历当前子数组的每一个对象,检查item.book是否等于"C" - 只要任意一个子数组里存在符合条件的对象,
hasBookC就会变成true,遍历直接终止
方法二:先扁平化数组再检查
如果觉得嵌套的some()有点绕,也可以先把二维数组转成一维数组,再做检查:
var test = [[{book:"A"}, {book:"B"}]]; const flattenedArray = test.flat(); // 转成一维数组:[{book:"A"}, {book:"B"}] const hasBookC = flattenedArray.some(item => item.book === "C"); console.log(hasBookC); // false
小提示:
如果你的数组是更深层次的嵌套(比如三维、四维),可以给flat()传参数Infinity来彻底扁平化:test.flat(Infinity)
方法三:传统for循环(兼容旧环境)
要是需要兼容不支持ES6语法的旧环境,用传统循环也能实现:
var test = [[{book:"A"}, {book:"B"}]]; let hasBookC = false; // 遍历外层数组 for (let i = 0; i < test.length; i++) { const innerArr = test[i]; // 遍历子数组里的对象 for (let j = 0; j < innerArr.length; j++) { if (innerArr[j].book === "C") { hasBookC = true; break; // 找到目标后跳出内层循环 } } if (hasBookC) break; // 跳出外层循环,不用继续遍历 } console.log(hasBookC); // false
不管用哪种方法,都能准确判断目标对象是否存在~
内容的提问来源于stack exchange,提问作者puranjay11m
相关产品推荐
相关产品推荐

