为了账号安全,请及时绑定邮箱和手机立即绑定

按键对对象数组进行分组,其中键是数组

按键对对象数组进行分组,其中键是数组

慕莱坞森 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 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信