2016-08-01 4 views
2

У меня есть два объекта javascript, которые имеют несколько свойств.Заменить общие свойства объекта javascript

var object1 = {"prop1":"a", "prop2": "b", "prop3":"c"}; 
var object2 = {"prop2":"d", "prop4": "e", "prop5":"f"}; 
//replace shared properties here 
//maybe using object.hasOwnProperty??? 
return object1; 
//desired output: {"prop1":"a", "prop2": "d", "prop3":"c"}; 

Я хотел бы использовать object1 в качестве шаблона для возврата набора фильтров к моему пользователю, однако, фильтры могут меняться, и эти изменения будут сохранены в Объект2. Я пытаюсь восстановить свойства в объекте1 с объектами в объекте 2, только если они существуют в обоих объектах. В этом примере, например, я хочу использовать значения по умолчанию prop1 и prop3, используйте значение object2 prop2 и игнорируйте prop4 и prop5. я мог бы легко перебрать свойства object1 и проверить, если они находятся в Object2, но я чувствую, что должен быть более простой способ сделать это (похож на union() или intersection())

ответ

2

Что-то вроде этого?

var object1 = {"prop1":"a", "prop2": "b", "prop3":"c"} 
 
var object2 = {"prop2":"d", "prop4": "e", "prop5":"f"} 
 

 
function mergeCommon (a, b) { 
 
    return Object.keys(a).reduce((obj, prop) => { 
 
    if (prop in b) obj[prop] = b[prop] 
 
    return obj 
 
    }, a) 
 
} 
 

 
console.log(mergeCommon(object1, object2))

1

Один из способов сделать это будет:

const object1 = {"prop1":"a", "prop2": "b", "prop3":"c"}; 
 
const object2 = {"prop2":"d", "prop4": "e", "prop5":"f"}; 
 
for (const key in object1) { 
 
    if (object1.hasOwnProperty(key) && object2.hasOwnProperty(key)) { 
 
    object1[key] = object2[key]; 
 
    } 
 
} 
 
console.log(object1);

+0

я бил тебя по всего 1 секунду – Tyrsius

+0

@Tyrsius хорошо сделано. Думаю, ваш ответ будет считаться более «современным». – mash

2

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

var object1 = {"prop1":"a", "prop2": "b", "prop3":"c"}; 
 
var object2 = {"prop2":"d", "prop4": "e", "prop5":"f"}; 
 

 
var output = {}; 
 

 
Object.keys(object1).forEach(function(k) { 
 
    output[k] = (object2[k] === undefined ? object1 : object2)[k]; 
 
}); 
 

 
console.log(output);

+0

Если 'object2.prop2' является ложным, он не будет распространяться на' object1.prop2'. (Попробуйте с помощью 'var object2 = {" prop2 ": 0," prop4 ":" e "," prop5 ":" f "};' –

+0

@RickHitchcock Спасибо, это исправлено. – Arnauld

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