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

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

根據某些屬性過濾嵌套數組

根據某些屬性過濾嵌套數組

30秒到達戰場 2022-07-15 09:30:03
我有一個數組:var data = [{  "name": "Main Hobbies",  "checked": false,  "children": [{    "name": "Dance",    "checked": false,    "children": [{      "name": "Salsa",      "checked": true    }, {      "name": "Solo",      "checked": false    }]  }, {    "name": "Sports",    "checked": false,    "children": [{      "name": "Cricket",      "checked": true    }]  }]}, {  "name": "Game",  "checked": false,  "children": [{    "name": "PUBG",    "checked": false  }, {    "name": "Cricket",    "checked": false  }, {    "name": "Football",    "checked": true  }]}]function removeFalseElem(arr) {  arr.forEach(element => {    if (Array.isArray(element.children) && element.children.length > 0) {      element.children = element.children.filter(e => {        return e.checked === true      });      element.children.map(e => {        delete e['id'], delete e['checked']      })    } else {      removeFalseElem(element.children);    }    delete element['id'], delete element['checked'];  });}removeFalseElem(data);console.log(data);我如何映射name到key和包含 where is . 應該包含,因為它已被檢查。我只想顛倒這個問題的方法childrenarraycheckedtrueMain hobiesSalsa輸出應該像{  "Main Hobbies": { Dance: ["Salsa"], Sports: ["Cricket"] },  Game: ["Football"]}必須只保留checked:true值
查看完整描述

2 回答

?
繁星coding

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

使用以下輔助方法,遍歷項目并構建所需的輸出。

1) 過濾器——給定一個數組,返回為真的名稱

2) hasGrandChild——給定對象是否有子對象,子對象是否有子對象。


const process = data => {

  const filter = arr => arr.filter(x => x.checked).map(x => x.name);

  const hasGrandChild = arr => arr.length > 0 && "children" in arr[0];

  const output = {};


  data.forEach(({ name, children }) => {    

    if (hasGrandChild(children)) {

      const obj = {};

      children.forEach(ch => (obj[ch.name] = filter(ch.children)));

      output[name] = obj;

    } else {

      output[name] = filter(children);

    }

  });

  return output;

};


var data = [

  {

    name: "Main Hobbies",

    checked: false,

    children: [

      {

        name: "Dance",

        checked: false,

        children: [

          {

            name: "Salsa",

            checked: true

          },

          {

            name: "Solo",

            checked: false

          }

        ]

      },

      {

        name: "Sports",

        checked: false,

        children: [

          {

            name: "Cricket",

            checked: true

          }

        ]

      }

    ]

  },

  {

    name: "Game",

    checked: false,

    children: [

      {

        name: "PUBG",

        checked: false

      },

      {

        name: "Cricket",

        checked: false

      },

      {

        name: "Football",

        checked: true

      }

    ]

  }

];


console.log(process(data));


查看完整回答
反對 回復 2022-07-15
?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

您可以檢查子項是否不包含子項并返回一個名稱數組或使用選中的節點創建一個對象。


const

    getObject = array => array.every(({ children }) => !children)

        ? array.reduce((r, { name, checked }) => checked ? [...(r || []), name] : r, undefined)

        : array.reduce((r, { name, checked, children = [] }) => {

            children = getObject(children);

            if (checked || children) r[name] = children;

            return r;

        }, {}),            

    data = [{ name: "Main Hobbies", checked: false, children: [{ name: "Dance", checked: false, children: [{ name: "Salsa", checked: true }, { name: "Solo", checked: false }] }, { name: "Sports", checked: false, children: [{ name: "Cricket", checked: true }] }] }, { name: "Game", checked: false, children: [{ name: "PUBG", checked: false }, { name: "Cricket", checked: false }, { name: "Football", checked: true }] }],

    result = getObject(data);


console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }


查看完整回答
反對 回復 2022-07-15
  • 2 回答
  • 0 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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