gpt4 book ai didi

javascript - 如何合并对象数组的所有数组以获得唯一值?

转载 作者:行者123 更新时间:2023-11-29 16:36:46 25 4
gpt4 key购买 nike

我有一些这样的数据:

const items = [
{ _id: '1', reference: ['abc'] },
{ _id: '2', reference: ['def'] },
{ _id: '3', reference: ['abc'] }
]

items 的长度总是不同的。

现在我需要在一个数组中获取所有唯一的引用字符串。所以结果应该是

['abc', 'def']

因为 'abc' 是重复的。

我尝试使用 forEach() 循环:

const references = []
items.forEach(i => {
references.concat(i.reference)
})

console.log(references)

但是 references 只是得到一个空数组结果。此外,我没有处理重复项......


我想使用 ES6 模式。有了它,我知道我可以使用这样的东西:

const array1 = ['abc']
const array2 = ['def']
const array3 = Array.from(new Set(array1.concat(array2)))

但我如何使用循环来获取每个项目对象的每个引用数组 - 即使我不知道项目数组中有多少对象?

最佳答案

如果你想做一个函数式风格(map-reduce),你可以这样做

const items = [
{ _id: '1', reference: ['abc'] },
{ _id: '2', reference: ['def'] },
{ _id: '3', reference: ['abc'] }
]

// extract references and put them into a single array
const references =
items
.map(x => x.reference)
.reduce((prev, cur) => prev.concat(cur))

// put them in a set to dedupe
const set = new Set(references)

console.log(references)
console.log([...set])

如果您想减少对数据的传递,并避免需要Set,您可以这样做。

const items = [
{ _id: '1', reference: ['abc'] },
{ _id: '2', reference: ['def'] },
{ _id: '3', reference: ['abc'] }
]

const result = Object.keys(items.reduce((obj, {reference}) => {
for (const ref of reference) {
obj[ref] = true
}
return obj;
}, {}))

console.log(result)

您还可以使用下面的完全命令式方法以表现力换取性能。

const items = [
{ _id: '1', reference: ['abc'] },
{ _id: '2', reference: ['def'] },
{ _id: '3', reference: ['abc'] }
];

const occ = {};
const references = [];
for (let i = 0; i < items.length; ++i) {
const refs = items[i].reference;
for (let j = 0; j < refs.length; ++j) {
const ref = refs[j];
if (occ[ref] == null) {
references.push(ref);
occ[ref] = true;
}
}
}

console.log(references)

关于javascript - 如何合并对象数组的所有数组以获得唯一值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50535622/

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