将新属性添加到另一个数组中的现有对象数组

Posted

技术标签:

【中文标题】将新属性添加到另一个数组中的现有对象数组【英文标题】:Add new property to existing array of object from another array 【发布时间】:2017-10-13 05:40:55 【问题描述】:

我不知道如何正确地写标题,请原谅我。

基本上我有一个来自某个地方的对象数组列表,我需要将它们映射在一起。如何使用下面的代码我无法做到。

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/

我需要在所选数组的基础上添加一个额外的属性。为什么上面的代码不起作用?

【问题讨论】:

确切的预期结果是什么? 【参考方案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 对象(在我们的例子中是人)

【讨论】:

这里:developer.mozilla.org/en/docs/Web/JavaScript/Reference/…其实是,检查selected中的索引是否和selected.indexOf(p.id) > -1一样 一般我都会用indexOf,比较常见,用include比indexOf有什么好处? 我个人更喜欢返回我期望的类型的函数,例如布尔值。 indexOf 检查是否存在对我来说似乎是 hack。值得庆幸的是,es6 允许它。【参考方案2】:

你可以这样做:

检查数组中的id是否存在于selected数组中:

selected.includes(obj.id)

因此,如果 obj.id 存在于 selected 数组中,则包含返回 true。如果存在(是),那么您的 Object.assignpart 代码将执行。

您的代码不起作用的原因是因为您的 person 数组和 selected 数组没有相同数量的元素(计数),并且可能也不按顺序排列。 所以person[0] id 为 1 与selected[0] id 为 2 不匹配,依此类推。

const person = [
    name: 'hello',
    id: 1
  ,
  
    name: 'javascript',
    id: 2
  ,
  
    name: 'world',
    id: 3
  
];

const selected = [2, 3];

const normalized = person.map((obj, i) => selected.includes(obj.id) ? Object.assign(, obj, 
  checked: true
) : obj);

console.log(normalized);

【讨论】:

以上是关于将新属性添加到另一个数组中的现有对象数组的主要内容,如果未能解决你的问题,请参考以下文章

将新对象添加到数组

React中将对象从数组移动到数组到另一个对象时的位置镜像

检查对象值是不是存在于 Javascript 对象数组中,如果不存在则将新对象添加到数组

关于ivx中将对象数组的某一列添加到另一对象数组中的经验总结

React Js,将新对象添加到数组中[重复]

如何使用 pymongo 将新的值数组附加到 mongodb 中的现有数组文档?