2014-12-31 3 views
2

У меня есть несколько объектов с одинаковой структурой; некоторые из них имеют нулевые значения для некоторых полей, тогда как один из объектов (здесь obj2) имеет значения для поля, которое имеет нулевые значения в других объектах; Я хочу, чтобы объединить их ро и cosider тот, который имеет значение:Самый чистый способ слияния объектов

var obj2 = { 
    options: [ 
     null 
    ], 
    name: "name1", 
} 

var obj1 = { 
    options: [ 
     {"option": "option1"} 
    ], 
    name: "name1", 
} 

desiredOutput = { 
    options: [ 
     {"option": "option1"} 
    ], 
    name: "name1", 
} 

Моя попытка: Я попытался lodash; но prpoblem с lodash заключается в том, что порядок имеет эффекты; то есть, какой бы объект ни появился, последний перезаписывает предыдущие для указанного поля:

Я пробовал lodash; здесь myArray представляет собой массив объектов obj1, obj2, ...

var newResults = {}; 
    for (var i = 0; i < myArray.length; i++) { 
     newResults = lodash.extend(newResults, myArray[i]); 
    } 

Какое самое чистое решение для этого? Благодаря

+1

Чтобы уточнить, у вас будет массив объектов, таких как 'obj1' и' obj2', и вы хотите объединить все объекты в массиве, чтобы любой массив 'options', который содержит' null', будет переопределен следующим объектом в массиве? – lukewestby

+0

Точно, но массив параметров, который содержит null, будет переопределен не обязательно следующим объектом в массиве, фактически объектом, который имеет значения для этого поля (параметры) –

+0

Таким образом, массив параметров должен быть переопределен первым объектом вправо который не содержит 'null' – lukewestby

ответ

0

Основываясь на том, что вы объяснили в вопросе и комментарии, что мы пытаемся достигнуть, выбор объекта в myArray где options не содержит null. В этом случае нам не нужно выполнять слияние, мы можем просто искать массив для желаемого объекта.

var newResults = _.find(myArray, function (obj) { 
    return !_.contains(obj.options, null); 
}); 

newResults будет первый объект в массиве, где options не содержит null.

+0

Простой и чистый! Отлично –

Смежные вопросы