Разбить массив на 2 массива, сгруппированных по атрибутам объекта [дубликат]

На этот вопрос уже есть ответ:

Я могу добиться разбиения объекта на массивы и сгруппировать по Атрибуты используют классические для циклов и условий, но я хотел бы воспользоваться функциональными возможностями JavaScript, такими как map, filter и Reduce. Вот что я пытаюсь достичь:

Вот мой начальный набор данных:

let arr = [
    {type:"orange", title:"First"},
    {type:"orange", title:"Second"},
    {type:"banana", title:"Third"},
    {type:"banana", title:"Fourth"}
];

1-й желаемый результат будет:

[{type:"orange", title:"First"},
{type:"orange", title:"Second"}]

[{type:"banana", title:"Third"},
 {type:"banana", title:"Fourth"}]

2-й желаемый результат будет один объект с двумя массивами:

 { "orange" : [ {type:"orange", title:"First"},
                {type:"orange", title:"Second"}],
   "banana" : [ {type:"banana", title:"Third"},
                {type:"banana", title:"Fourth"}]
 }

Как преобразовать объекты в массивы, которые имеют ключ к определенному свойству в JavaScript?

-8
задан George Stocker 23 August 2019 в 13:50
поделиться

2 ответа

Сначала найдите свои ключи:

const keys = [...new Set(arr.map(x=>x.type))]

И затем фильтруют массив и отображают свойства:

keys.map(x=>({[x]:arr.filter(s=>s.type==x).map(r=>({title:r.title}))}))
-2
ответ дан 6 September 2019 в 19:22
поделиться

Сначала один:

    let arr = [
        {type:"orange", title:"First"},
        {type:"orange", title:"Second"},
        {type:"banana", title:"Third"},
        {type:"banana", title:"Fourth"}
    ];

    let oranges = arr.reduce((obj, cur) => {
        if(cur.type === "orange") {
          obj.push(cur)
        }
        return obj

    },[])


    let bananas = arr.reduce((obj, cur) => {
        if(cur.type === "banana") {
          obj.push(cur)
        }
        return obj

    },[])

    console.log(oranges)
    console.log(bananas)
-2
ответ дан 6 September 2019 в 19:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: