Слияние объектов - PullRequest
1 голос
/ 07 июня 2019

Я пытаюсь рекурсивно объединить объекты.

что у меня есть

arrayOfObjects = [{a1:{aa:k1}},{a1:{ab:k2}},{a1:{ac:k3}},{a1:{aa:k4}},{a1:{ab:k5}}];

что мне нужно, это

{a1:{aa:k1,ab:k2,ac:k3,aa:k4,ab:k5}}

Я сделал функцию

function merg(array){
    value = {};
    if(array.length>0){
       $.each(array, function (i) {
           value = $.extend(true,{},value,array[i]);
       });
    }
    return value;
};

console.log(merg(arrayOfObjects));

что я получаю

{a1:{aa:k1,ab:k2,ac:k3}}

aa: k4, ab: k5 отсутствуют (возможно из-за того же значения ключа)

если глубокое слияние ложно, я получаю только одно значение

value = $.extend({},value,array[i]);
{a1:{aa:k1}}

1 Ответ

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

Мы можем использовать символы,

var arr = [{a1:{aa:'k1'}},{a1:{ab:'k2'}},{a1:{ac:'k3'}},{a1:{aa:'k4'}},{a1:{ab:'k5'}}];;

var op = {};

var result = {};

var globalKey;

arr.forEach((ar) => {
    var [key, value] = Object.entries(ar)[0];
    globalKey = key;
    var [innerKey, innerValue] = Object.entries(value)[0];
    op[Symbol(innerKey)] = innerValue;
});

result[globalKey] = op;

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