繁体   English   中英

删除 javascript 中嵌套数组中的特定元素

[英]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,所以我能给你的最好建议是编写可读的代码,而不是寻找讨厌的技巧。 因此,可读性和可维护性>>效率 这并不意味着您不应该关心效率,而是大多数时候优雅可读的解决方案高效的

此外,几乎不尝试优化代码会让你失去很多时间(在学习时)并且可能会发疯。

话虽如此,我真的很喜欢mapfilter的实现,因为它更具可读性,更清晰并且不会改变原始数组,这在许多情况下都非常好。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM