我有一个'过滤器对象'如:
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' }]
}
答案 0 :(得分:0)
typeof []
返回"object"
。尝试使用Array.isArray()
检查作为数组的属性的值;将if
条件更改为
if (typeof obj[key] == 'object' && typeof filterObj[key] == 'object'
/* check if `obj[key]` and `filterObj[key]` are arrays */
&& ![obj[key], filterObj[key]].every(Array.isArray))
jsfiddle https://jsfiddle.net/ddqLqz9d/1/