[英]Remove specific element in nested array in javascript
我有以下结构。 我正在尝试删除 deleteTargetCodeArr 中的 small_caterogy 中的特定元素
const parentArr = [
{
middle_code: "EX42",
middle_name: "Checkup A",
small_category:[{name: 'HAV Ab IgG', code: 'CH187'},{name: 'HAV Ab IgM', code: 'CH188'}]
},
{
middle_code: "EX42",
middle_name: "Checkup B",
small_categor:[{name: 'HAV Ab IgG', code: 'CH194'},{name: 'HAV Ab IgM', code: 'CH200'}, {name: 'HAV Ab IgM', code: 'CH201'}]
},
]
const deleteTargetCodeArr =['CH187', 'CH200']
所以结果应该如下所示
[
{
middle_code: "EX42",
middle_name: "Checkup A",
small_category:[{name: 'HAV Ab IgM', code: 'CH188'}]
},
{
middle_code: "EX42",
middle_name: "Checkup B",
small_categor:[{name: 'HAV Ab IgG', code: 'CH194'}, {name: 'HAV Ab IgM', code: 'CH201'}]
},
]
我在这个链接中找到了很好的解决方案( JS: Remove object from nested array and return parent array )
我在下面尝试了这个,对我来说效果很好。
const resultArr = parentArr
resultArr.forEach((item)=> item. small_category.forEach((small, index1)=>{
if(deleteTargetCodeArr.includes(small.code)){
return item. small_category.splice(index1,1)
}
}))
我想知道是否有任何有效的方法来解决这个问题。 因为我查了几篇文章,他们说最好使用 map、过滤器或类似这些方法来提高效率。 并且使用 forEach 会导致更改原始数据是危险的。 另外我不确定这是否正确使用重复的迭代器语句..
如果有更好的想法请与我分享谢谢:) ☺️
我猜你正在学习 JS,所以我能给你的最好建议是编写可读的代码,而不是寻找讨厌的技巧。 因此,可读性和可维护性>>效率。 这并不意味着您不应该关心效率,而是大多数时候优雅可读的解决方案是高效的。
此外,几乎不尝试优化代码会让你失去很多时间(在学习时)并且可能会发疯。
话虽如此,我真的很喜欢map
和filter
的实现,因为它更具可读性,更清晰并且不会改变原始数组,这在许多情况下都非常好。
const yourOutput = parentArr.map((el) => {
// This builds a new array, *mapping* every element of the old array into something else
// This builds a filtered array, throwing away only what you don't like
const filteredCategories = el.small_category.filter(
(category) => !deleteTargetCodeArr.includes(category.code)
);
// Here we return, for each element of the old array, the shape of each element in the new array!
return {
middle_code: el.middle_code,
middle_name: el.middle_name,
small_category:filteredCategories
}
});
console.log(yourOutput);
在这里,我使用map
因为我们想要获得数组的更改版本,并filter
以实际过滤掉内部 arrays。
如果您发现它有用,请考虑支持/接受我的回答! 谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.