gpt4 book ai didi

javascript - 在两个对象数组之间相交,只保留匹配的元素,并根据对象的键删除不匹配的元素

转载 作者:行者123 更新时间:2023-11-30 08:22:36 43 4
gpt4 key购买 nike

我有两个对象数组,我需要在数组之间进行交叉以找出共同的对象,并根据其中一个键将其从不具有相同项目的第一个数组中删除。

请注意,我想改变第一个数组本身。

这是我的代码示例以及我尝试使用 .map 但未获得预期结果的内容。

(() => {
const first = Array.from({ length: 5 }, (_, i) => ({
id: `in-${i}`,
name: "one",
age: `${i * 5}`
}));

const second = Array.from({ length: 3 }, (_, i) => ({
id: `in-${i}`,
name: "two"
}));
console.log({ first });
console.log({ second });
const sid = second.map(s => s.id);

first.map((f, i) => {
if (sid.includes(f.id)) {
console.log("✔️ included");
} else {
console.log("👎🏻 not included");
first.splice(i, 1);
}
});
console.log("...now...");
console.log({ first });
console.log({ second });
})();

这不会删除第一个数组的最后一个数组元素。

预期输出:

[ { id: 'in-0', name: 'one', age: '0' },
{ id: 'in-1', name: 'one', age: '5' },
{ id: 'in-2', name: 'one', age: '10' }
] }

实际输出:

[ { id: 'in-0', name: 'one', age: '0' },
{ id: 'in-1', name: 'one', age: '5' },
{ id: 'in-2', name: 'one', age: '10' },
{ id: 'in-4', name: 'one', age: '20' } ] }

我在这里犯了什么错误?请帮忙。

此外,建议任何其他更短和简化的方法。我想我可以在这里使用 .reduce/forEach,但我不知道如何使用。

最佳答案

你可以使用.filter()

const result = first.filter(f => sid.includes(f.id) );

如果你想改变 first 数组,不要使用 const,用 let 替换它并像这样覆盖它:

first = first.filter(f => sid.includes(f.id));

(() => {
// replace const with let
let first = Array.from({
length: 5
}, (_, i) => ({
id: `in-${i}`,
name: "one",
age: `${i * 5}`
}));

const second = Array.from({
length: 3
}, (_, i) => ({
id: `in-${i}`,
name: "two"
}));

const sid = second.map(s => s.id);

// use .filter and overwrite the first array
first = first.filter(f => sid.includes(f.id));

console.log(first);

})();

关于javascript - 在两个对象数组之间相交,只保留匹配的元素,并根据对象的键删除不匹配的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51106436/

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