Сделать массив объектов из двух объектов - PullRequest
0 голосов
/ 15 июня 2019

Мне нужно создать массив объектов из 2 объектов: объекта идентификатора и объекта значений.

Я не могу понять, как отсортировать оба объекта одновременно и сравнить их ключи, чтобы получить результатмассив объектов

id: {
 value1: 1,
 value2: 2,
 value3: 3,
};
values: {
 value1: 11,
 value2: 22,
 value3: 33,
};

Имена ключей обоих объектов могут быть одинаковыми.Нужно что-то подобное:

result:[
 {1: 11},
 {2: 22},
 {3: 33},
]

Ответы [ 3 ]

1 голос
/ 15 июня 2019

Вам нужно собрать пары id и values, а затем отобразить новый массив с объектами.

var data = { id: { value1: 1, value2: 2, value3: 3 }, values: { value1: 11, value2: 22, value3: 33 } },
    result = Array.from(
        Object
            .entries(data)
            .reduce(
                (m, [l, o]) => Object
                    .entries(o)
                    .reduce((n, [k, v]) => n.set(k, Object.assign({ [l]: v }, n.get(k))), m),
                 new Map
            )
            .values(),
        ({ id, values }) => ({ [id]: values })
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 15 июня 2019

Если ключи одинаковы в id и value, вы можете просто отобразить ключи одного из них и использовать ключ для получения соответствующих значений от каждого объекта:

let data = {id: {value1: 1,value2: 2,value3: 3,},values: {value1: 11,value2: 22,value3: 33,}}

let result = Object.keys(data.id).map(k => ({[data.id[k]]: data.values[k]}))
console.log(result)
0 голосов
/ 15 июня 2019

Попробуйте:


let result = [];
Object.keys(id).forEach((key)=>{
    let temp = {};
    temp[id[key]] = values[key];
    result.push(temp)
})

Это даст вам вывод, как вы упомянули, но я не понимаю, почему вы бы хотели, чтобы result был массивом вместо объекта.

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