将键值对添加到数组中的所有对象

Shr*_*tty 33 javascript arrays

我想为数组中的所有对象添加一个键:value参数.

例如:

var arrOfObj = [{name: 'eve'},{name:'john'},{name:'jane'}];
Run Code Online (Sandbox Code Playgroud)

现在我想为所有对象添加一个新参数isActive,以便生成的数组看起来像.

例如:

    [{
    name: 'eve',
    isActive: true
}, {
    name: 'john',
    isActive: true
}, {
    name: 'jane',
    isActive: true
}]
Run Code Online (Sandbox Code Playgroud)

我总是可以遍历数组并插入一个键值对.但是想知道是否有更好的方法

Nen*_*car 50

你可以这样做 map()

var arrOfObj = [{
  name: 'eve'
}, {
  name: 'john'
}, {
  name: 'jane'
}];

var result = arrOfObj.map(function(o) {
  o.isActive = true;
  return o;
})

console.log(result)
Run Code Online (Sandbox Code Playgroud)

如果要保留原始数组,可以使用以下方法克隆对象 Object.assign()

var arrOfObj = [{
  name: 'eve'
}, {
  name: 'john'
}, {
  name: 'jane'
}];

var result = arrOfObj.map(function(el) {
  var o = Object.assign({}, el);
  o.isActive = true;
  return o;
})

console.log(arrOfObj);
console.log(result);
Run Code Online (Sandbox Code Playgroud)

  • 没有必要返回 (3认同)

Ser*_*lov 22

当然.看一下ES5的数组方法

在这种情况下,您使用.map():

const newArr = [
  {name: 'eve'},
  {name: 'john'},
  {name: 'jane'}
].map(v => ({...v, isActive: true}))
Run Code Online (Sandbox Code Playgroud)

或者在ES6中

const initialArr = [
      {name: 'eve'},
      {name: 'john'},
      {name: 'jane'}
    ]

const newArr1 = initialArr.map(v => ({...v, isActive: true}))
const newArr2 = initialArr.map(v => Object.assign({}, {isActive: true}))

// Results of newArr1 and newArr2 are the same
Run Code Online (Sandbox Code Playgroud)

Atm那些方法有很好的浏览器支持(除了猜猜谁).


另外,我想你reccomend以确保您了解以下方法:.MAP() ,.filter() ,和.降低() .这是一个很好的开始


Mar*_*ana 15

我对这里提出的一些答案会有点谨慎,以下示例根据方法输出不同:

const list = [ { a : 'a', b : 'b' } , { a : 'a2' , b : 'b2' }]

console.log(list.map(item => item.c = 'c'))
// [ 'c', 'c' ]

console.log(list.map(item => {item.c = 'c'; return item;}))
// [ { a: 'a', b: 'b', c: 'c' }, { a: 'a2', b: 'b2', c: 'c' } ]

console.log(list.map(item => Object.assign({}, item, { c : 'c'})))
// [ { a: 'a', b: 'b', c: 'c' }, { a: 'a2', b: 'b2', c: 'c' } ]
Run Code Online (Sandbox Code Playgroud)

我使用node v8.10.0来测试上面的代码片段.