2017-05-31 55 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' }