如何从对象内部的数组中删除项。
它应该删除所有的爱好是舞蹈。我试图使用拼接。
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);
2条答案
按热度按时间u0sqgete1#
您的代码几乎是正确的,但是在迭代数组时使用forEach修改数组时会有一个小问题。这可能会导致跳过元素或错误的结果。相反,使用filter方法创建一个新数组,其中只包含不匹配条件的元素。
它使用forEach遍历每个人、文档和类别,但不是直接修改类别数组,而是将类别数组重新分配给一个新数组,其中只包含爱好不是'dance'的元素。这可以防止在迭代数组时修改数组的任何问题。
vojdkbi02#
完全没有必要,但我个人喜欢这种任务的集合:
我不认为我通常会像在这里一样从数组转换到set再转换回数组,但值得考虑使用Set作为数据结构而不是Array。