【问题标题】:Angular 2 add key and value to each array objectAngular 2为每个数组对象添加键和值
【发布时间】:2019-04-03 07:41:53
【问题描述】:

我有一个对象数组:

array = [
  {name: 'name'},
  {name: 'name'},
  {name: 'name'},
  {name: 'name'},
]

我想为每个人添加 key: '123' 所以它会是:

array = [
  {name: 'name', key: '123'},
  {name: 'name', key: '123'},
  {name: 'name', key: '123'},
  {name: 'name', key: '123'},
]

我尝试过的:

checked = false;
     this.editObj.forEach(item => item.push(this.checked))

错误:item.push 不是函数。

但它不起作用。如何以正确的方式做到这一点?

【问题讨论】:

  • 要修改数组内的对象所以需要使用item["key"] = "123"

标签: javascript arrays angular typescript javascript-objects


【解决方案1】:

你应该这样做:

this.editObj.forEach(item => item["key"]= "123");
console.log(this.editObj);

【讨论】:

  • 这将返回一个错误 :) Uncaught SyntaxError: missing ) after argument list
【解决方案2】:
const arr = [
  {name: 'name'},
  {name: 'name'},
  {name: 'name'},
  {name: 'name'},
]

const arr2 = arr.map(x => ({...x , key: '123'}));

【讨论】:

  • 将 ES5 var 与 ES6 ...(扩展运算符)混合使用是不可思议的。请使用const
【解决方案3】:

您的代码不起作用,因为您在对象上使用.push(),而不是在数组上。 试试这个:

this.editObj.forEach(item => item["key"] = this.checked);

【讨论】:

  • no-return-assign规则。
  • @GrégoryNEUT 我知道这条规则,但它是 1-liner 的简写
  • this.editObj.forEach(item => (item["key"] = this.checked;));怎么样
【解决方案4】:

您可以尝试创建自定义词典

array = [
{name: 'name'},
{name: 'name'},
{name: 'name'},
{name: 'name'},
]

var dict = []; // create an empty dictionary
for (i = 0; i < array.length; i++) { 

  dict.push({
    key:   "123",
    value: array[i].name
  });
  

}
  console.log(dict);

【讨论】:

    【解决方案5】:

    除了 IE11

    创建一个新数组

    const array = [{
        name: 'name',
      },
      {
        name: 'name',
      },
      {
        name: 'name',
      },
      {
        name: 'name',
      },
    ];
    
    console.log(array.map(x => ({
      ...x,
    
      key: '123',
    })));

    更新现有数组

    const array = [{
        name: 'name',
      },
      {
        name: 'name',
      },
      {
        name: 'name',
      },
      {
        name: 'name',
      },
    ];
    
    array.forEach((x) => {
      x.key = '123';
    });
    
    console.log(array);

    在 IE11 中

    var array = [{
        name: 'name',
      },
      {
        name: 'name',
      },
      {
        name: 'name',
      },
      {
        name: 'name',
      },
    ];
    
    for (var i = 0; i < array.length; i += 1) {
      array[i].key = '123';
    }
    
    console.log(array);

    【讨论】:

      猜你喜欢
      • 2019-02-02
      • 1970-01-01
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-30
      • 2022-07-06
      • 2020-03-16
      相关资源
      最近更新 更多