如何检测嵌套数组中所有key属性值是否全部相等?
如何检测嵌套数组中所有key属性值是否全部相等?
先看你给出的示例数据:
[{ array: [{ key: 1 }] }, { array: [{ key: 1 }, { key: 3 }, { key: 3 }] }, { array: [{ key: 1 }, { key: 2 }] }]
针对这种嵌套结构,有两种高效的实现方式,推荐优先用第二种(短路遍历,性能更优):
方法一:扁平化所有key后统一校验
先把所有嵌套的key值提取成一维数组,再判断数组内所有元素是否和第一个元素相等:
const data = [/* 你的示例数据 */]; // 提取所有key到一维数组 const allKeys = data.flatMap(item => item.array.map(el => el.key)); // 校验所有key是否等于第一个key(兼容空数组场景) const allKeysEqual = allKeys.length === 0 || allKeys.every(key => key === allKeys[0]); console.log(allKeysEqual); // 示例中返回false
这种方式直观,适合需要保留所有key值做后续处理的场景,但需要遍历所有元素才能得到结果。
方法二:嵌套使用every做短路校验
利用every的短路特性——只要遇到不符合条件的元素就立即停止遍历,性能更优:
const data = [/* 你的示例数据 */]; // 处理空数据的边界情况 if (data.length === 0 || data[0].array.length === 0) { console.log(true); // 可根据业务需求调整空数组的返回逻辑 } else { // 取第一个有效key作为基准值 const baseKey = data[0].array[0].key; // 外层遍历每个对象,内层遍历其array数组的每个元素 const allKeysEqual = data.every(item => item.array.every(el => el.key === baseKey)); console.log(allKeysEqual); // 示例中返回false }
这种方式在遇到第一个不等的key时就会终止遍历,不需要处理剩余元素,适合大数据量的场景。
你提到的forEach结合every逻辑类似,但forEach无法中途终止遍历,所以嵌套every是更优的选择。
内容的提问来源于stack exchange,提问作者Asaf Abekasis
相关产品推荐
相关产品推荐

