我有以下結構。我正在嘗試洗掉 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:從嵌套陣列中洗掉物件并回傳父陣列)
我在下面嘗試了這個,對我來說效果很好。
const resultArr = parentArr
resultArr.forEach((item)=> item. small_category.forEach((small, index1)=>{
if(deleteTargetCodeArr.includes(small.code)){
return item. small_category.splice(index1,1)
}
}))
我想知道是否有任何有效的方法來解決這個問題。因為我查了幾篇文章,他們說最好使用地圖、過濾器或類似的方法來提高效率。并且使用 forEach 會導致更改原始資料是危險的。另外我不確定這是否正確使用重復的迭代器陳述句..
如果有更好的想法請與我分享謝謝:)????
uj5u.com熱心網友回復:
我猜你正在學習 JS,所以我能給你的最好建議是撰寫可讀的代碼,而不是尋找討厭的技巧。因此,可讀性和可維護性>>效率。這并不意味著您不應該關心效率,而是大多數時候優雅可讀的解決方案是高效的。
此外,盡可能多地優化代碼會讓你失去很多時間(在學習時),而且很可能你不會從中得到太多。
話雖這么說,我真的很喜歡 and 的實作map
,filter
因為它更具可讀性、更清晰并且不會改變原始陣列,這在許多情況下都非常好。
const yourOutput = parentArr.map((el) => {
// This builds a new array, *mapping* every element of the old array into something new
// 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
實際過濾掉內部陣列。
如果您發現它有用,請考慮支持/接受我的回答!謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/504486.html
標籤:javascript 数组 目的 嵌套的