Копирование свойств из одного объекта в другой с условием

Lazy-me задается вопросом, есть ли лучший способ скопировать свойства в один объект (источник) на другой объект (назначение), только если свойства существуют в последнем? Он не обязательно должен использовать подчеркивание.

например,

_.mixin({
    assign: function (o, destination, source) {
        for (var property in source) {
            if (destination.hasOwnProperty(property)) {
                destination[property] = source[property];
            }
        }
        return destination;
    }
});

console.log( _().assign({ a: 1, b: 2, d: 3 }, { a: 4, c: 5 }) ) // a: 4, b: 2, d: 3

2 ответов


один ленивый вариант:

_.extend(a, _.pick(b, _.keys(a)));

_.pick фильтры источник


использовать Object.assign(obj1, obj2); (Если свойства существуют в последнем), который является родным в ES6 (без подчеркивания.js требуется).

Объект.методом assign() используется для копирования значений всех перечисляемые собственные свойства от одного или нескольких объектов-источников до цели объект. Он вернет целевой объект. подробнее здесь.

пример:

var o1 = { a: 1 };
var o2 = { b: 2 };
var o3 = { c: 3 };

var obj = Object.assign(o1, o2, o3);
console.log(obj);

альтернативно использовать undescore.js

_.extend(destination, *sources)

или

_.extendOwn(destination, *sources)

Detailated информацию можно найти здесь: http://underscorejs.org/#extend