Javascript массив-объект конвертировать один ключ, значение массива один объект - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть такой объект:

[ 
    { "number": 12, "string": "hi"},
    { "number": 40, "string": "bye"}
] 

Я хочу:

{"number": [12, 40], "string": ["hi", "bye"]}

Или:

{"number": "12,40", "string": "hi,bye"}

Ответы [ 5 ]

0 голосов
/ 22 ноября 2018

Вы можете использовать lodash's _.mergeWith(), чтобы объединить их:

const arr = [{ "number": 12, "string": "hi"}, { "number": 40, "string": "bye"}];

const result =_.mergeWith({}, ...arr, (s = [], o) => [...s, o]);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
0 голосов
/ 22 ноября 2018

Вы можете уменьшить массив и энтрис объекта и собрать все значения с помощью их ключа в массиве, не имея жестко закодированных свойств.

var array = [{ number: 12, string: "hi" }, { number: 40, string: "bye" }],
    result = array.reduce(
        (r, o) => Object.entries(o).reduce(
            (s, [k, v]) => ((s[k] = s[k] || []).push(v), s),
            r
        ),
        {}
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 22 ноября 2018

Вы можете использовать Array.reduce() для этого:

var arr = [ 
    { "number": 12, "string": "hi"},
    { "number": 40, "string": "bye"}
];
var res = arr.reduce((acc, item)=>{
  if(acc.number && acc.string){
    acc.number.push(item.number);
    acc.string.push(item.string);
  } else {
    acc = {
      number: [item.number],
      string: [item.string]
    }
  }
  return acc;
}, {});
console.log(res);
0 голосов
/ 22 ноября 2018

Я сделал это так:

let array = [ 
    { "number": 12, "string": "hi"},
    { "number": 40, "string": "bye"}
];

let resultObject = {
    numbers: [],
  strings: []
}

for (let element of array) {
 resultObject.numbers.push(element.number);
 resultObject.strings.push(element.string);
}

console.log(resultObject);

Надеюсь, это поможет:)

0 голосов
/ 22 ноября 2018

Вы можете использовать Array.prototype.reduce () :

Метод reduce() выполняет функцию редуктора (которую вы предоставляете) для каждого члена массива, получающегося в результатев одном выходном значении.

Решение с объединенной строкой:

var data = [ 
    { "number": 12, "string": "hi"},
    { "number": 40, "string": "bye"}
] 
data = data.reduce((a,c)=>{
  a.number = a.number + ',' +c.number;
  a.string = a.string + ',' +c.string;
  return a;
});
console.log(data);

Решение с массивом:

var data = [ 
    { "number": 12, "string": "hi"},
    { "number": 40, "string": "bye"}
]

data = data.reduce((a,c)=>{
  a.number.push(c.number);
  a.string.push(c.string);
  return a;
}, {number:[],string:[]});
console.log(data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...