You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测嵌套数组中所有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:35:19