角度9如何从角度数组对象的所有数组中删除字段?

时间:2020-03-26 07:22:42

标签: javascript arrays angular splice

可以说我有以下列表,称为indexesToBeRemoved

indexesTobeRemoved = ['auto_id', 'auto_date']

我想遍历以下数组数组:

allArrays = [
    {
      'auto_id': 123,
      'auto_date': '2019-02-02',
      'name': 'John Doe',
      'address': 'USA'
    },
    {
      'auto_id': 147,
      'auto_date': '2019-03-02',
      'name': 'Peter Doe',
      'address': 'USA'
    },
    {
      'auto_id': 258,
      'auto_date': '2019-04-02',
      'name': 'Hanna Doe',
      'address': 'USA'
    }
  ];

我需要遍历该数组中的每个数组,以删除列表indexesTobeRemoved中存在的字段。因此,数组的数组如下所示:

allArrays = [
    {
      'name': 'John Doe',
      'address': 'USA'
    },
    {
      'name': 'Peter Doe',
      'address': 'USA'
    },
    {
      'name': 'Hanna Doe',
      'address': 'USA'
    }
  ];

我尝试了以下操作:

removeIndexes() {
    this.indexesTobeRemoved.forEach((value) => {
      console.log(value);
      Object.keys(this.allArrays).forEach((key, val) => {
        this.allArrays.splice(value, 1);
        console.log(this.allArrays[key]);
      });
    })

但是在执行时,数组allArray将为空。

这里是stackblitz

2 个答案:

答案 0 :(得分:4)

您可以使用嵌套的forEach()循环和delete运算符

const allArrays = [ { 'auto_id': 123, 'auto_date': '2019-02-02', 'name': 'John Doe', 'address': 'USA' }, { 'auto_id': 147, 'auto_date': '2019-03-02', 'name': 'Peter Doe', 'address': 'USA' }, { 'auto_id': 258, 'auto_date': '2019-04-02', 'name': 'Hanna Doe', 'address': 'USA' } ];

let keys = ['auto_id', 'auto_date'];
allArrays.forEach(x => {
  keys.forEach(k => delete x[k])
})
console.log(allArrays)

答案 1 :(得分:2)

请使用forEach而不是map。 这是为什么的解释:

https://gofore.com/en/why-you-should-replace-foreach/

您要搜索的是 delete 运算符。 JavaScript delete运算符从对象中删除属性;如果不再保留对同一属性的引用,则该属性最终将自动释放。

this.indexesTobeRemoved.map(key => {  
  this.allArrays.map(array => delete array[key]);
});