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

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

按鍵對對象數組進行分組,其中鍵是數組

按鍵對對象數組進行分組,其中鍵是數組

慕萊塢森 2023-08-18 16:46:25
我們可以通過對象的鍵來實現對對象數組的分組,其中鍵也是一個數組嗎?[    {        "name": "Apple",        "tags": ["fruits"]    },    {        "name": "Orange",        "tags": ["fruits"]    },    {        "name": "Tomato",        "tags": ["fruits", "vegetables"]    }]分組后的對象中想要的結果:{    "fruits": [        {            "name": "Apple",            "tags": ["fruits"]        },        {            "name": "Orange",            "tags": ["fruits"]        },        {            "name": "Tomato",            "tags": ["fruits", "vegetables"]        }    ],    "vegetables": [        {            "name": "Tomato",            "tags": ["fruits", "vegetables"]        }    ]}非常歡迎 Vanilla 或 Lodash 解決方案!編輯謝謝大家,這是我最終使用的:const groupBy = key => array =>    array.reduce((obj, el) => {        el[key].forEach(k => {            obj[k] = obj[k] || []            obj[k].push({ ...el })        })        return obj    }, {})const groupBySomething = groupBy(`something`)const grouped = groupBySomething(data)
查看完整描述

3 回答

?
GCT1015

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

這使用Array.prototype.reduce和Array.prototype.forEach


{

? const data = [

? ? {

? ? ? ? "name": "Apple",

? ? ? ? "tags": ["fruits"]

? ? },

? ? {

? ? ? ? "name": "Orange",

? ? ? ? "tags": ["fruits"]

? ? },

? ? {

? ? ? ? "name": "Tomato",

? ? ? ? "tags": ["fruits", "vegetables"]

? ? }

? ]

?

? const groupedData = data.reduce((carry, element) => {

? ? element.tags.forEach(tag => {

? ? ? carry[tag] = carry[tag] || []

? ? ? carry[tag].push({...element})

? ? })

? ? return carry;?

? }, {})

??

? console.log(groupedData)

}


查看完整回答
反對 回復 2023-08-18
?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

這里:


let arr = [

    {

        "name": "Apple",

        "tags": ["fruits"]

    },

    {

        "name": "Orange",

        "tags": ["fruits"]

    },

    {

        "name": "Tomato",

        "tags": ["fruits", "vegetables"]

    }

];


let response = {};

for(let i of arr){

  for(let j of i.tags){

     let tags =[...i.tags]

     if(response[j]){

        response[j].push({...i , tags: tags})

     } else{

        response[j] = [{...i, tags: tags}];

     }

  }

}


console.log(response)


查看完整回答
反對 回復 2023-08-18
?
呼如林

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

輸入數據:


const data = [

    {

        "name": "Apple",

        "tags": ["fruits"]

    },

    {

        "name": "Orange",

        "tags": ["fruits"]

    },

    {

        "name": "Tomato",

        "tags": ["fruits", "vegetables"]

    }

];

const convertData = data.reduce((target, currentElem) => {

        currentElem.tags.forEach(tag => {

            target[tag] ? target[tag].push({...currentElem}) : target[tag] = [{...currentElem}];

        });

        return target;

}, {});


console.log(convertData);


查看完整回答
反對 回復 2023-08-18
  • 3 回答
  • 0 關注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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