как собрать данные из json объектов с несколькими ключами и pu sh все значения в один ключ: массив значений - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть образец json объекта:

var jsonString = '[{ "name":"John", "age":30, "car":Mercedes},{ "name":"Jimy", "age":32, "car":Audi},{ 
"name":"Mia", "age":22, "car":Renault},{ "name":"Frank", "age":35, "car":null }]';

var data = JSON.parse(jsonString);

Я хотел бы получить последние две данные из массива данных и создать один массив ключ: значение, чтобы для каждого свойства json является ключом в массиве, и все значения из всех json объектов хранятся под соответствующим ключом, поэтому, например, я бы хотел получить общий массив [{key: data_array_for_that_key}] или, в частности:

output=[{name: [Frank, Mia]}, {age: [35,22]}, {car: [null, Renault]}......]

Я пробовал что-то вроде этого:

var output = [];

  data.slice(-2).forEach((d, i) => {
    Object.keys(d).forEach((key) => {
      output.push({[key] : d[key]});
    });
  });
  console.log(output);

, но он создает ключ и значение для каждого json объекта, что не то, что я хочу.

Как я могу решить это?

1 Ответ

2 голосов
/ 04 февраля 2020

Вы можете взять таблицу ha sh для группировки одинаковых клавиш и pu sh для каждого нового ключа новый объект output;

var jsonString = '[{ "name":"John", "age":30, "car":"Mercedes"},{ "name":"Jimy", "age":32, "car":"Audi"},{"name": "Mia", "age": 22, "car": "Renault"},{"name": "Frank","age": 35,"car": null}]',
    data = JSON.parse(jsonString);
    output = [],
    temp = [];

data.slice(-2).forEach(o => Object.entries(o).forEach(([k, v]) => {
    if (!temp[k]) output.push({ [k]: temp[k] = [] });
    temp[k].push(v);
}));

console.log(output);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...