Как объединить все значения из массивов - PullRequest
0 голосов
/ 03 августа 2020

Я могу получить все уникальные свойства из такого массива,

var array = [{
  "firstName": "John",
  "lastName": "Doe"
}, {
  "firstName": "Anna",
  "car": true
}, {
  "firstName": "Peter",
  "lastName": "Jones"
}];

var result = [];
array.reduce( function(pre, item) {
    Object.keys(item).forEach(function(i){
        if (result.indexOf(i) === -1){
            result.push(i);
        }
    });
});

console.log(result);

Однако теперь мне нужен этот результат,

[{   
    "firstName":"John, Anna, Peter",   
    "car": "true",   
    "lastName": "Doe, Jones" 
}]

, но я не уверен, как это сделать?

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Различные способы. Вот один:

//get unique properties - hence Set, not array, so dups are omitted
let props = new Set(array.map(obj => Object.keys(obj)).flat());

//get non-falsy value for each prop type, as an array
let vals = [...props].map(prop => array.map(obj => obj[prop]).filter(a => a).join(', '));

//merge the two via Object.fromEntries()
let final = Object.fromEntries.call(null, [...props].map((prop, i) => [prop, vals[i]]));
0 голосов
/ 03 августа 2020

Этого можно добиться, имея объект поиска, в котором хранятся все значения свойства. Затем манипулируйте этим объектом, объединив все вхождения

Нижеприведенный фрагмент может помочь вам

var array = [
  {
    firstName: "John",
    lastName: "Doe",
  },
  {
    firstName: "Anna",
    car: true,
  },
  {
    firstName: "Peter",
    lastName: "Jones",
  },
]

var lookup = {}
var result = {}

array.forEach((obj) => {
  Object.entries(obj).forEach(([key, val]) => {
    if (!lookup[key]) {
      lookup[key] = [val]
    } else {
      lookup[key].push(val)
    }
  })
})

Object.entries(lookup).forEach(([key, val]) => {
  result[key] = val.join(', ')
})

console.log(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...