Javascript downcasting对象

时间:2017-05-31 17:48:39

标签: javascript javascript-objects downcast

我想知道是否有本地方式来转发对象。

我的意思是,如果我有这样的对象:person1 = {name: 'Doe', age: 25};

和其他人一样:person2 = {name: ''};

是否有 someFunction 可用于执行以下操作:var person = somefunction(person2, person1);并获取person = {name: 'Doe'}

或者有原型的方法吗?

感谢。

4 个答案:

答案 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' }