Javascript 具有重复属性值的对象数组
我有一个对象数组,如何才能得到那些具有重复属性值的对象Javascript 具有重复属性值的对象数组,javascript,jquery,arrays,object,Javascript,Jquery,Arrays,Object,我有一个对象数组,如何才能得到那些具有重复属性值的对象 var array = [{"id":1,"attr":5},{"id":2,"attr":3},{"id":3,"attr":5}]; 这里它应该返回array[0]和array[2],因为这些元素具有重复的属性值(attr=5)。 并返回唯一数组。 数组=[{“id”:2,“attr”:3}] 针对未排序数据的单循环方法,使用哈希表临时收集组的第一个对象或仅指示组的重复项 var数组=[{“id”:1,“attr”:5},{“id”
var array = [{"id":1,"attr":5},{"id":2,"attr":3},{"id":3,"attr":5}];
这里它应该返回array[0]
和array[2]
,因为这些元素具有重复的属性值(attr=5)。
并返回唯一数组。
数组=[{“id”:2,“attr”:3}] 针对未排序数据的单循环方法,使用哈希表临时收集组的第一个对象或仅指示组的重复项
var数组=[{“id”:1,“attr”:5},{“id”:2,“attr”:3},{“id”:3,“attr”:5}],
hash=Object.create(null),
结果=数组。减少((r,o)=>{
if(哈希中的o.attr){
if(散列[o.attr]){
r、 push(hash[o.attr]);
hash[o.attr]=false;
}
r、 推(o);
}否则{
散列[o.attr]=o;
}
返回r;
}, []);
控制台日志(结果)代码>
。作为控制台包装{max height:100%!important;top:0;}
您可以使用生成器函数和嵌套循环检查重复项:
function* dupes(arr, key) {
for(const [index, el] of arr.entries())
for(const el2 of arr.slice(index + 1))
if(index !== index2 && el[key] === el2[key])
yield [el, el2];
}
因此,您可以将其用作:
for(const [dupe1, dupe2] of dupes(yourArray, "attr"))
console.log(`${dupe1} collides with ${dupe2}`);
@Cerburs,不,op想要数组中超过时间的那些。@NinaScholz:查找重复项的过程不会改变。另外:没有尝试,这只是一个要求,期望工作代码得到回报。堆栈溢出不是免费的代码编写服务,请说明您的代码/努力以及实际问题是什么。为什么Object.create(null)
而不是{}
?它创建了一个没有原型的空对象。为什么要使用这样的嵌套函数来初始化哈希值?这对代码的可读性/可维护性并没有什么好处