我想知道是否有本地方式来转发对象。
我的意思是,如果我有这样的对象:person1 = {name: 'Doe', age: 25};
和其他人一样:person2 = {name: ''};
是否有 someFunction 可用于执行以下操作:var person = somefunction(person2, person1);
并获取person = {name: 'Doe'}
?
或者有原型的方法吗?
感谢。
答案 0 :(得分:2)
您可以编写一个从对象中去除额外属性的函数。
function removeExtraProperties(interf, obj) {
let interfaceKeys = Object.keys(interf);
for (let key in obj) {
if (!obj.hasOwnProperty(key)) {
// Make sure we don't strip off inherited properties
// Remove this if you want to
continue;
}
if (!interfaceKeys.includes(key)) {
delete obj[key];
}
}
}
let person = { firstName: '' };
let bob = { firstName: 'Bob', lastName: 'Smith' };
removeExtraProperties(person, bob);
console.log(bob);

答案 1 :(得分:0)
您知道要删除的媒体资源的名称吗?如果是这样,为什么不删除对象上的特定键呢?
var person1 = {
name: 'Doe',
age: 25
};
delete person1['age'];
console.log(person1);
答案 2 :(得分:0)
当然,存在这样的功能:
function filterObj(p2, p1) {
return Object.keys(p2).reduce(function (build, el) {
build[el] = p1[el];
return build;
}, {});
}
person1 = {name: 'Doe', age: 25};
person2 = {name: ''};
console.log(filterObj(person2, person1));

答案 3 :(得分:0)
我对 downcast 概念并不十分确定,但我认为我会使用Object.assign(),使用枚举属性:
"use strict"
let person1 = { name: 'Doe', age: 25 }
let person2 = { name: '' }
for (let key in person1) {
if (!person2.hasOwnProperty(key)) {
Object.defineProperty(person1, key, { enumerable: false })
}
}
let person = Object.assign(person2, person1)
console.log(person) // { name: 'Doe' }
正如其他答案中所建议的那样,有很多方法可以做到这一点,如果你需要它,你当然可以把它变成原型。
修改强>
我意识到我的第一次尝试并不是很好,因为它改变了初始对象
我利用这个来使它变得更简单:
let Person = function() {}
Person.prototype.downcast = function (p1, p2) {
let c = {}
for (let k in p1) {
if (p2.hasOwnProperty(k)) {
c[k] = p1[k]
}
}
return c
}
let person = new Person().downcast(person1, person2)
console.log(person) // { name: 'Doe' }