javascript - 如何检查对象数组是否所有值都重复?
问题描述
var values = [
{ name: 'Car',Data:'Required',value:'Vehicle' },
{ name: 'Auto',Data:'Required',value:'Vehicle'},
{ name: 'Bike',Data:'Required',value:'Vehicle'},
{ name: 'Car',Data:'Required',value:'Vehicle' }
];
重复的对象将是:{ name: 'Car',Data:'Required',value:'Vehicle' }
解决方案
如果要检查对象的所有属性,则必须引入一个新函数,并使用它来过滤数组:
var values = [
{ name: 'Car',Data:'Required',value:'Vehicle' },
{ name: 'Auto',Data:'Required',value:'Vehicle'},
{ name: 'Bike',Data:'Required',value:'Vehicle'},
{ name: 'Bike',Data:'Required',value:'Different VL'},
{ name: 'Car',Data:'Required',value:'Vehicle' }
];
Object.compare = function (obj1, obj2) {
//Loop through properties in object 1
for (var p in obj1) {
//Check property exists on both objects
if (obj1.hasOwnProperty(p) !== obj2.hasOwnProperty(p)) return false;
switch (typeof (obj1[p])) {
//Deep compare objects
case 'object':
if (!Object.compare(obj1[p], obj2[p])) return false;
break;
//Compare function code
case 'function':
if (typeof (obj2[p]) == 'undefined' || (p != 'compare' && obj1[p].toString() != obj2[p].toString())) return false;
break;
//Compare values
default:
if (obj1[p] != obj2[p]) return false;
}
}
//Check object 2 for any extra properties
for (var p in obj2) {
if (typeof (obj1[p]) == 'undefined') return false;
}
return true;
};
var doubles = values.filter((x,i,a) =>a.slice(0,i).find(y=>Object.compare(x,y)))
console.log(doubles)
推荐阅读
- javascript - 我想要一个数组中的子数组,忽略它的最后两个索引(没有循环)
- python - 如何使用 Python 从网站中获取特定文本
- java - 为什么我的循环没有检索到最后的项目?
- moodle - 获取用户响应
- ios - 如何使用 Swift 在 iOS 应用中接收/导入共享数据?
- laravel - 在 Laravel .blade 文件中使用 DB 是否安全?
- java - 无法使用 FIFO LinkedList Java 正确插入元素
- python - 通过变量获取属性
- c - GCC 编译 (ld) 问题的最后一步
- angular - 模板解析错误:“mat-icon”不是已知元素