Простой JavaScript Convert JSON формат

1

У меня есть формат json и вы хотите конвертировать Изображение 174551

Вот мой сценарий. Я попытался, но не могу получить правильные результаты. Пожалуйста, дайте несколько советов, спасибо и оцените.

function groupBy() {
var list = [{
        "id": "009",
        "Nm": "Model 1",
        "pid": "adidas"
    },
    {
        "id": "007",
        "Nm": "Model 1",
        "pid": "adidas"
    },
    {
        "id": "006",
        "Nm": "Model 1",
        "pid": "adidas"
    },
    {
        "id": "pm1",
        "Nm": "Model 1",
        "pid": "puma"
    },
    {
        "id": "003",
        "Nm": "Model 1",
        "pid": "adidas"
    },
    {
        "id": "pm5",
        "Nm": "Model 1",
        "pid": "puma"
    },
    {
        "id": "aj1",
        "Nm": "Model 1",
        "pid": "nike"
    },
    {
        "id": "aj2",
        "Nm": "Model 1",
        "pid": "nike"
    }
];
var output = [];
for (var i = 0; i < list.length; i++) {
    if (list[i].pid != undefined) {
        output.push(list[i]);
    }
}
console.log(output);
}
groupBy();
Теги:

3 ответа

5
Лучший ответ

Один из вариантов заключается в том, чтобы reduce к объекту, индексированному pid s, значениями которого являются массивы. На каждой итерации создайте массив в соответствующем свойстве, если оно не существует, а затем нажмите на этот массив:

var list = [
  {"id":"009","Nm":"Model 1","pid":"adidas"},
  {"id":"007","Nm":"Model 1","pid":"adidas"},
  {"id":"006","Nm":"Model 1","pid":"adidas"},
  {"id":"pm1","Nm":"Model 1","pid":"puma"},
  {"id":"003","Nm":"Model 1","pid":"adidas"},
  {"id":"pm5","Nm":"Model 1","pid":"puma"},
  {"id":"aj1","Nm":"Model 1","pid":"nike"},
  {"id":"aj2","Nm":"Model 1","pid":"nike"}
];
console.log(
  list.reduce((a, item) => {
    const { pid } = item;
    if (!a[pid]) a[pid] = [];
    a[pid].push(item);
    return a;
  }, {})
);
  • 0
    это работает! Спасибо за вашу помощь!
1

Ты довольно близко. Но [] заключается в инициализации массива вместо объекта в javascript. В JS это {}.

Ниже приведен один из многих способов, которыми вы можете это сделать.

function groupBy() {
    var list = [
        {"id":"009","Nm":"Model 1","pid":"adidas"},
        {"id":"007","Nm":"Model 1","pid":"adidas"},
        {"id":"006","Nm":"Model 1","pid":"adidas"},
        {"id":"pm1","Nm":"Model 1","pid":"puma"},
        {"id":"003","Nm":"Model 1","pid":"adidas"},
        {"id":"pm5","Nm":"Model 1","pid":"puma"},
        {"id":"aj1","Nm":"Model 1","pid":"nike"},
        {"id":"aj2","Nm":"Model 1","pid":"nike"}
    ];

    // Initialize output as an object
    var output = {};

    for (var i = 0; i < list.length; i++){
        // 'objectKey' is where you group the list item by its 'pid'
        var objectKey = list[i].pid;

        // If there a 'pid' in the list item, but 'output' is not an array yet, then..
        if (objectKey && !output.hasOwnProperty(objectKey)){
            // Initialize output.group to be an array
            output[ objectKey ] = [];
        }

        // Then finally, store the list into output group that we created above.
        output[ objectKey ].push( list[i] );
    }

    console.log(output);
}               

groupBy();
  • 0
    это работает! Спасибо за ваше объяснение, цените его!
0

Используйте этот метод для своей группы

const groupBy = function(arr, prop) {
  return arr.reduce(function(groups, item) {
    const val = item[prop]
    groups[val] = groups[val] || []
    groups[val].push(item)
    return groups
  }, {})
}

const list = [
                {"id":"009","Nm":"Model 1","pid":"adidas"},
                {"id":"007","Nm":"Model 1","pid":"adidas"},
                {"id":"006","Nm":"Model 1","pid":"adidas"},
                {"id":"pm1","Nm":"Model 1","pid":"puma"},
                {"id":"003","Nm":"Model 1","pid":"adidas"},
                {"id":"pm5","Nm":"Model 1","pid":"puma"},
                {"id":"aj1","Nm":"Model 1","pid":"nike"},
                {"id":"aj2","Nm":"Model 1","pid":"nike"}
            ];

const groupOutput = groupBy(list, 'pid');

Вы передаете свой ключ в качестве второго аргумента в groupBy для группы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню