0
我有一個「濾鏡對象」,如:JS深比較2個對象和除去在第二找到的項目而不是第一
var filterObj = { name: '',
age: '',
address: {street: '', city: ''},
friends: [name: '']
}
然後一個對象,例如:
var obj = { name: 'Bob',
age: '23',
car: 'Ford'
address: {street: '1 the street', city: 'Gotham'},
friends: [ {name: 'Tony'}, {name: 'Sandra' }]
}
我想將第二個對象與第一個對象進行比較,並刪除第一個未找到的第二個對象。我有這樣的:
filterData: function (obj, filterObj) {
var newObj = {};
for (var key in filterObj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] == 'object' && typeof filterObj[key] == 'object' || typeof filterObj[key] == 'array') {
newObj[key] = this.filterData(obj[key], filterObj[key]);
}else {
newObj[key] = obj[key];
}
}
}
return newObj;
}
,幾乎工作,但只保留數組中的第一項,然後將陣列切換到一個對象。
所以我的預期成果是:
var result = { name: 'Bob',
age: '23',
address: {street: '1 the street', city: 'Gotham'},
friends: [ {name: 'Tony'}, {name: 'Sandra' }]
}
JS小提琴: https://jsfiddle.net/ddqLqz9d/
'變種ARR = []; typeof arr' returns'「object」';嘗試使用'Array.isArray(arr)' – guest271314
我知道你只使用jQuery,但你可能會對lodash的defaultsDeep()函數感興趣:https://lodash.com/docs#defaultsDeep不知道它會與內部array雖然 – phenxd
你的代碼可以簡單得多,如果它與對象引用,而不是複製 – hindmost