2017-05-31 56 views
0

我想知道是否有本地方式向下转换对象。Javascript向下转换对象

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

和其他类似:person2 = {name: ''};

someFunction可以用来做这样的事情:var person = somefunction(person2, person1);并获得person = {name: 'Doe'}

还是有原型的方法吗?

谢谢。

+1

为什么你甚至需要“垂头丧气”吗?如果对象具有额外的属性,这是否重要? –

+0

是的,它很重要。我正在用IBM BPM Framework定义的类型分配一个变量。如果我有额外的属性,它说没有在数据类型中定义。 –

+0

@JosueGarcia所以如果有额外的数据,框架会抛出一个错误?如果没有,没有理由剥夺额外的财产。如果是这样,我已经在下面给出了答案。 –

回答

0

你知道你想要删除的属性的名称吗?如果是这样,为什么不直接删除对象的特定键?

var person1 = { 
 
    name: 'Doe', 
 
    age: 25 
 
}; 
 

 
delete person1['age']; 
 

 
console.log(person1);

1

你可以写,从一个对象剥去额外的属性的功能。

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);

+0

我只会阻止使用'interface'作为参数名称,因为它是JS中未来保留的关键字*。虽然没有真正的用例AFAIK,至少现在 –

+0

@NicholasKyriakides好点。将它重命名为'interf'。 –

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));

0

我真的不知道有关低垂概念,但是对于我认为我会用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' }