JS深度比较2个对象并删除在第二个对象中找到的项目,而不是第一个
JS deep compare 2 objects and remove items found in the second but not the first
我有一个"过滤器对象",例如:
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/
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/
相关文章:
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 按不同项目对对象数组进行排序
- 原始javascript将json对象中的项目打印到列表中的屏幕上
- 如何通过迭代对象数组来删除某些项目
- 在 JavaScript 对象中添加子对象时获取“无法设置未定义的属性'项目'”
- Javascript:从数组中删除包含带有侦听器的对象的项目的最佳方法
- M项目2:是否可以从DOM对象中获取M视图
- 范围$手表项目doens'不适用于javascript对象的字段
- 从jQuery数组或元素的对象列表中选择第N个项目
- AngularJS ForEach将新项目推送到对象中
- 如何删除localStorage中的特定项目/对象
- Javascript 如何将项目推送到存储在对象中的数组中
- 在单击选项卡式项目时隐藏和创建另一个对象 - HTML CSS
- 下划线.js,从一个对象中获取两个项目并添加到顶部
- JS深度比较2个对象并删除在第二个对象中找到的项目,而不是第一个
- 对对象数组中的项目进行分组和排序
- JavaScript 将项目添加到对象的开头
- 将项目推送到对象数组 - JavaScript
- 如何将大量项目添加到 HTML 选择对象
- 下划线.js在对象数组中查找唯一值;返回唯一项目及其计数