亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從遞歸函數內的數組中刪除對象

從遞歸函數內的數組中刪除對象

SMILET 2022-09-29 17:42:04
我有以下模型對象:const model = {    _id: '1',    children: [        {            id: '2',            isCriteria: true        },        {            id: '3',            isCriteria: true        }    ]}PS:孩子的深度是未知的,所以我必須使用遞歸函數來導航它。我想根據id數組從子數組中刪除特定對象。因此,例如,如果進行以下調用,則結果應為:removeCriteria(model, ['2'])const model = {    _id: '1',    children: [        {            id: '2',            isCriteria: true        }    ]}我按如下方式實現了這個函數:function removeCriteria(node, criteria, parent = []) {    if (node.isCriteria) {        if (criteria.length && !criteria.includes(node.id)) {            parent = parent.filter(criteria => criteria.id !== node.id);        }        console.log(parent) // here the parents object is correct but it doesn't modify the original object    }    if (node.children)        for (const child of node.children) removeCriteria(child, criteria, node.children);}
查看完整描述

1 回答

?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

賦值給 不會賦值到值來自的對象屬性。parent


您需要篩選并分配回該屬性。node.children


function removeCriteria(node, criteria) {

  if (criteria.length == 0) {

    return;

  }

  if (node.children) {

    node.children = node.children.filter(child => !child.isCriteria || criteria.includes(child.id));

    node.children.forEach(child => removeCriteria(child, criteria));

  }

}

const model = {

  _id: '1',

  children: [{

      id: '2',

      isCriteria: true

    },

    {

      id: '3',

      isCriteria: true

    }

  ]

}


removeCriteria(model, ['2']);

console.log(model);


查看完整回答
反對 回復 2022-09-29
  • 1 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號