从对象中的数组中删除项目

问题描述 投票:0回答:1

如何从对象中的数组中删除项目。

应该去掉所有跳舞的爱好。 我试着用拼接。

const people = [{
    id: 1,
    documents: [{
        id: 1,
        category: [{
          hobby: 'soccer'
        }, {
          hobby: 'dance'
        }]
      },
      {
        id: 2,
        category: [{
          hobby: 'soccer'
        }, {
          hobby: 'dance'
        }]
      }
    ]
  },
  {
    id: 2,
    documents: [{
        id: 1,
        category: [{
          hobby: 'dance'
        }, {
          hobby: 'soccer'
        }]
      },
      {
        id: 2,
        category: [{
          hobby: 'soccer'
        }, {
          hobby: 'dance'
        }]
      }
    ]
  }
];
people.forEach(person => {
  person.documents.forEach(document => {
    document.category.forEach((cat, index) => {
      if (cat.hobby === 'dance') {
        document.category.splice(index, 1)
      }
    })
  })
})

console.log(people);

javascript arrays typescript object splice
1个回答
0
投票

您的代码几乎是正确的,但是在迭代数组时使用 forEach 修改数组时会出现一个小问题。这可能导致跳过元素或不正确的结果。相反,使用 filter 方法创建一个仅包含不符合条件的元素的新数组。

people.forEach(person => {
person.documents.forEach(document => {
    document.category = document.category.filter(cat => cat.hobby !== 'dance');
})
});

console.log(people);

这使用 forEach 遍历每个人、文档和类别,但不是直接修改类别数组,而是将类别数组重新分配给一个新数组,其中只有爱好不是“舞蹈”的元素。这可以防止在迭代数组时与修改数组相关的任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.