[英]How to filter an object based on a filter object
是否有一種簡便的方法來僅使用filterInterface
定義的屬性來過濾bigObject
,以將filteredObject
作為輸出?
大對象具有很多屬性,我想將信息分解為所需的屬性(將其保存在某個地方,不想/不能保存整個對象)。
// My big object
var bigObject = {
prop1: {
prop2: {
prop3: 123,
prop4: 456,
prop5: "TEST"
},
prop6: 789,
prop7: "xxx"
},
prop8: 5.6,
prop9: 3
};
// My "interface" to filter the object
var filterInterface = {
prop1: {
prop2: {
prop3: true,
},
prop7: true
}
};
// My expected result, only the properties of
// big Object which match the interface
var filteredObject = {
prop1: {
prop2: {
prop3: 123,
},
prop7: "xxx"
}
};
簡要地說,我希望這樣的事情:
var filteredObject = {}
for (var key in filterObject) {
if (bigObject.hasOwnProperty(key)) {
filteredObject[key] = bigObject[key];
}
}
如果要“深度”過濾,請包括遞歸:
function filter(obj, filterObj) {
var newObj = {};
for (var key in filterObj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] == 'object' && typeof filterObj[key] == 'object') {
newObj[key] = filter(obj[key], filterObj[key]);
} else {
newObj[key] = obj[key];
}
}
}
return newObj;
}
var o = filter(bigObject, filterInterface);
alert(o.prop1.prop7); // 'xxx'
alert(o.prop1.prop9); // undefined
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.