javascript检查数组是否包含多个属性完全相同的元素

javascript检查数组是否包含多个属性完全相同的元素,javascript,arrays,Javascript,Arrays,我有一个对象数组: [ { id: 1, sku: 'aaaa' }, { id: 2, sku: 'bbbb' }, { id: 3, sku: 'cccc' }, { id: 4, sku: 'aaaa' } ] 如何检查数组中是否存在多个具有相同sku属性的元素 例如:我必须使用相同的道具sku('aaaa')创建元素-在这种情况下,我需要在其他情况下执行一些操作-nothing使用set获取包含唯一sku的

我有一个对象数组:

[
  {
   id: 1,
   sku: 'aaaa'
  },
  {
   id: 2,
   sku: 'bbbb'
  },
  {
   id: 3,
   sku: 'cccc'
  },
  {
   id: 4,
   sku: 'aaaa'
  }
]
如何检查数组中是否存在多个具有相同
sku
属性的元素


例如:我必须使用相同的道具
sku
('aaaa')创建元素-在这种情况下,我需要在其他情况下执行一些操作-nothing

使用set获取包含唯一sku的数组并比较长度

var skus = items.map(v=>v.sku);
var uniqueSkus = new Set(skus);
console.log(skus.length === uniqueSkus.size)

您可以使用如下示例代码:

var a=[
{
id:1,
sku:‘aaaa’
},
{
id:2,
sku:“bbbb”
},
{
id:3,
sku:‘中交’
},
{
id:4,
sku:‘aaaa’
}
];
var b={};
a、 forEach(el=>{
如果(b[el.sku]){
b[el.sku].count++;
}否则{
b[el.sku]={id:el.id,计数:1};
}
});

控制台日志(b)您可以像下面这样检查数组函数“some”将帮助您

 var arr = [
  {
   id: 1,
   sku: 'aaaa'
  },
  {
   id: 2,
   sku: 'bbbb'
  },
  {
   id: 3,
   sku: 'cccc'
  },
  {
   id: 4,
   sku: 'aaaa'
  }
]

const val = 'aaaa'

const isAvailable = arr.some(function(arrVal) {
        return val === arrVal.sku;
});

//here isAvailable will return true or false
const a=[
{
id:1,
sku:“aaaa”
},
{
id:2,
sku:“bbbb”
},
{
id:3,
sku:“中交”
},
{
id:4,
sku:“aaaa”
}
];
a、 减少((acc,obj)=>{
//循环遍历每个sku并将其添加到acc中
附件推送(对象sku);
//检查当前sku是否已存在于acc中。
const duplicate=acc.filter(x=>x==obj.sku);
如果(重复长度>1){
//在发现类似SKU时,对当前obj执行某些操作或不执行任何操作
//如果发现相同的SKU,我将添加一个名为x=10的新属性。
obj.x=10;
}否则{
//在发现类似SKU时,对当前obj执行某些操作或不执行任何操作
//如果不是相同的SKU,我将添加一个名为y=10的新属性。
对象y=10;
}
返回acc;
}, []);

控制台日志(a)这是否回答了您的问题?请添加想要的结果和您的尝试。它是,而不是
。length
考虑将您的代码块转换为活动片段,以演示您的操作概念为了回答OP的问题,您需要再次迭代
对象。值(b)
,以确定是否存在
计数>1
,因此,基本上,回答的一半我猜,OP的目的是找出是否存在重复值,而不是检查是否看到特定值。您的代码使用
.filter()
内部的
.reduce()
(O(n²)-时间算法)进行嵌套查找,如果源数组恰好足够大,则执行速度会非常慢。此外,使用
.reduce()
没有多大意义,只要您没有真正使用
acc
,那么简单的
.forEach()
可以很好地工作。OP也不要求返回true或false。也可以使用foreach,但reduce会有一点性能。“…reduce woudl be..performant”如果性能是您关心的问题,将算法转换为O(n)-时间,而不是使用
.reduce()进行微优化,您将获得更多
vs
.forEach()
“…OP不请求”,OP的请求相当模糊,但在我看来,在
true
false
上有条件地执行一些代码块不会花费他们太多精力