我想知道是否有本地方式向下轉換對象。Javascript向下轉換對象
我的意思是,如果我有這樣的對象:person1 = {name: 'Doe', age: 25};
和其他類似:person2 = {name: ''};
有someFunction可以用來做這樣的事情:var person = somefunction(person2, person1);
並獲得person = {name: 'Doe'}
?
還是有原型的方法嗎?
謝謝。
我想知道是否有本地方式向下轉換對象。Javascript向下轉換對象
我的意思是,如果我有這樣的對象:person1 = {name: 'Doe', age: 25};
和其他類似:person2 = {name: ''};
有someFunction可以用來做這樣的事情:var person = somefunction(person2, person1);
並獲得person = {name: 'Doe'}
?
還是有原型的方法嗎?
謝謝。
你知道你想要刪除的屬性的名稱嗎?如果是這樣,爲什麼不直接刪除對象的特定鍵?
var person1 = {
name: 'Doe',
age: 25
};
delete person1['age'];
console.log(person1);
你可以寫,從一個對象剝去額外的屬性的功能。
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);
我只會阻止使用'interface'作爲參數名稱,因爲它是JS中未來保留的關鍵字*。雖然沒有真正的用例AFAIK,至少現在 –
@NicholasKyriakides好點。將它重命名爲'interf'。 –
當然,這樣的功能存在:
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));
我真的不知道有關低垂概念,但是對於我認爲我會用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' }
爲什麼你甚至需要「垂頭喪氣」嗎?如果對象具有額外的屬性,這是否重要? –
是的,它很重要。我正在用IBM BPM Framework定義的類型分配一個變量。如果我有額外的屬性,它說沒有在數據類型中定義。 –
@JosueGarcia所以如果有額外的數據,框架會拋出一個錯誤?如果沒有,沒有理由剝奪額外的財產。如果是這樣,我已經在下面給出了答案。 –