我不知道如何正确地写出标题,请原谅我。
基本上我有一个来自某个地方的对象数组列表,我需要将它们映射到一起。如何使用我的代码,我无法做到。
const person = [
{name:'hello',id:1},
{name:'javascript',id:2},
{name:'world',id:3}
];
const selected = [2,3];
const normalized = person.map((obj,i) => obj.id === selected[i] ? Object.assign({}, obj, {checked:true}) : obj);
console.log(normalized)
https://jsfiddle.net/q9g0kazx/1/
我需要在所选数组上添加额外的属性。为什么上面的代码不起作用?
答案 0 :(得分:1)
如果我理解正确,只需使用forEach
遍历数组,并在需要时添加属性。
const person = [
{name: 'hello', id: 1},
{name: 'javascript',id: 2},
{name: 'world',id: 3}
];
const selected = [2,3];
person.forEach(p => {
if (selected.includes(p.id)) {
p.checked = true;
}
});
console.log(person);

或者您可以像这样使用map
:
const person = [
{name: 'hello', id: 1},
{name: 'javascript',id: 2},
{name: 'world',id: 3}
];
const selected = [2,3];
person.map(p => {
if (selected.includes(p.id)) {
p.checked = true;
}
return p;
});
console.log(person);

请注意,您必须return
该对象(在我们的情况下为人)
答案 1 :(得分:0)
你可以这样做:
检查数组中的id是否出现在selected
数组中:
selected.includes(obj.id)
因此,如果true
数组中存在obj.id
,则包括返回selected
。如果存在(是),那么代码的Object.assign
部分将执行。
您的代码无效的原因是因为您的person
数组和selected
数组不具有相同数量的元素(计数),也可能不在顺序中。
因此{1}} id为1并不与person[0]
id匹配,其中2等等。
selected[0]