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

如何验证对象数组中元素属性是否重复?求更优实现方案

优化对象数组指定属性值的出现次数判断

原代码通过filter后判断长度是否不等于1,来实现“目标name值的元素不是恰好出现一次”的判断,以下是几种更简洁高效的实现方式:

方法1:用some提前终止遍历(性能最优)

利用some的特性——一旦回调返回true就立即终止遍历,减少不必要的数组遍历操作,同时兼顾“完全不存在”的情况:

const value = 'a'
const value2 = 'c'
const arr = [{ name: 'a' }, { name: 'b' }]

const checkNonSingle = (arr, target) => {
  let count = 0;
  // 先检查是否出现超过1次
  const hasDuplicate = arr.some(item => {
    if (item.name === target) {
      count++;
      return count > 1;
    }
    return false;
  });
  // 要么重复,要么完全不存在,都返回true
  return hasDuplicate || count === 0;
}

console.log(checkNonSingle(arr, value)) // false(恰好出现1次)
console.log(checkNonSingle(arr, value2)) // true(完全不存在)

方法2:提取属性数组后用indexOf+lastIndexOf

先把所有name属性提取为字符串数组,通过判断目标值的首次和末次索引是否不同,来快速判断是否重复,同时处理不存在的情况:

const value = 'a'
const value2 = 'c'
const arr = [{ name: 'a' }, { name: 'b' }]

const names = arr.map(item => item.name);

const checkNonSingle = (namesArr, target) => {
  const firstPos = namesArr.indexOf(target);
  // 不存在 或者 首次和末次位置不同(说明重复)
  return firstPos === -1 || namesArr.lastIndexOf(target) !== firstPos;
}

console.log(checkNonSingle(names, value)) // false
console.log(checkNonSingle(names, value2)) // true

方法3:用reduce统计出现次数(简洁直观)

通过reduce直接统计目标值的出现次数,再判断是否不等于1:

const value = 'a'
const value2 = 'c'
const arr = [{ name: 'a' }, { name: 'b' }]

const checkNonSingle = (arr, target) => {
  const count = arr.reduce((total, item) => item.name === target ? total + 1 : total, 0);
  return count !== 1;
}

console.log(checkNonSingle(arr, value)) // false
console.log(checkNonSingle(arr, value2)) // true

内容的提问来源于stack exchange,提问作者letters

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:40:43