gpt4 book ai didi

Javascript比较多个对象数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:11:06 28 4
gpt4 key购买 nike

如何比较多个对象数组并添加新属性以及找到对象的次数和找到对象的数组索引?对象比较必须通过 name 属性进行。

例子:

var arrays = [
[
{
name: 'aa',
value: 1
},
{
name: 'ab',
value: 2
},
{
name: 'ac',
value: 3
},
{
name: 'aa',
value: 1
}
],
[
{
name: 'aa',
value: 1
},
{
name: 'ab',
value: 2
},
],
[
{
name: 'ac',
value: 3
},
{
name: 'aa',
value: 1
}
]
]

执行后,上述数组中的对象应具有以下属性:

[
[
{
name: 'aa',
value: 1,
occurrences: 3,
where: [0, 1, 2]
},
{
name: 'ab',
value: 2,
occurrences: 2,
where: [0, 1]
},
{
name: 'ac',
value: 3,
occurrences: 2,
where: [0, 2]
},
{
name: 'aa',
value: 1,
occurrences: 3,
where: [0, 1, 2]
}
],
[
{
name: 'aa',
value: 1,
occurrences: 3,
where: [0, 1, 2]
},
{
name: 'ab',
value: 2,
occurrences: 2,
where: [0, 1]
}
],
[
{
name: 'ac',
value: 3,
occurrences: 2,
where: [0, 2]
},
{
name: 'aa',
value: 1,
occurrences: 3,
where: [0, 1, 2]
}
]
]

基本上我想检查其他数组中是否存在具有特定 name 属性的对象。

这是我想到的解决方案: 1.循环遍历对象最多的数组
2.循环遍历每个对象
3. 遍历其他数组并应用 Array.prototype.find()
但这会花费很多时间,因为我的每个数组至少有 500 个对象......

最佳答案

您可以使用array#reduce 获取对象中出现的次数和出现的索引。

然后,您可以通过简单地使用 Object.assign() 并添加 where 来修改 arrays 中的对象occurrences 属性。

var arrays = [ [ { name: 'aa', value: 1 }, { name: 'ab', value: 2 }, { name: 'ac', value: 3 }, { name: 'aa', value: 1 } ], [ { name: 'aa', value: 1 }, { name: 'ab', value: 2 }, ], [ { name: 'ac', value: 3 }, { name: 'aa', value: 1 } ] ];

var result = arrays.reduce((res, arr, index) => {
arr.forEach(({name,value}) => {
res[name] = res[name] || {occurrences: 0};
res[name]['where'] = res[name]['where'] || [];
if(!res[name]['where'].includes(index)){
res[name]['where'].push(index);
res[name].occurrences += 1;
}
});
return res;
},{});

arrays.forEach(arr => arr.forEach(obj => Object.assign(obj, result[obj.name])));
console.log(arrays);

关于Javascript比较多个对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47389976/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com