如何检测每个元素的对象数组变化?
How detect change into arrays of object for each element?
我有一个对象数组。我想为数组中的每个元素获取与其他元素的区别。
例如,thi 是我的对象数组:
array= [{id:1, name= 'test', isAdmin: true, userMail:'test@test.com', userTel: '+12555555'},
{id:1, name= 'test', isAdmin: false, userMail:'test@test.com', userTel: '+12555555'}, {id:1,
name= 'test', isAdmin: false, userMail:'test@test.com', userTel: '+12555785444'}]
结果是:
result = [isAdmin, userMail, userTel]
我试过这个解决方案但没有用:
for (let index = 0; index < this.array.length; index++) {
const e = this.array[index];
let j = index + 1;
let t;
while (index !== j && j <= (this.array.length - 1) && t === undefined) {
t = this.difference(array);
j++;
}
let y;
if (t !== null && t !== undefined) {
Object.keys(t).forEach(key => {
if (key !== 'idTrace') {
y = key;
}
});
}
this.result.push(y);
}
difference(object, base) {
return transform(object, (result, value, key) => {
if (!isEqual(value, base[key])) {
result[key] = isObject(value) && isObject(base[key]) ?
this.difference(value, base[key]) : value;
}
});
}
任何帮助,在此先感谢。
你可以这样做。
请注意,这不是最高效的解决方案,但它是可以理解(可读)的解决方案,您可以根据需要对其进行优化。
const objects = [{
"id": 1,
"name": "test",
"isAdmin": true,
"userMail": "test@test.com",
"userTel": "+12555555"
},
{
"id": 1,
"name": "test",
"isAdmin": false,
"userMail": "test@test123.com",
"userTel": "+12555555"
},
{
"id": 1,
"name": "test",
"isAdmin": false,
"userMail": "test@test.com",
"userTel": "+12555785444"
}
];
// Finds all the keys that are different in two objects.
const difference = (obj1, obj2) => {
let foundKeys = [];
Object.keys(obj1).forEach(key => {
if (obj1[key] !== obj2[key]) {
foundKeys.push(key);
}
});
return foundKeys;
};
let differentKeys = [];
// Compares every object with all objects and pushes to one array all differences in keys.
for (let i = 0; i < objects.length; i++) {
for (let j = i + 1; j < objects.length; j++) {
differentKeys = differentKeys.concat(difference(objects[i], objects[j]));
}
}
// Removes duplicates.
differentKeys = differentKeys.filter(function(value, index, differentKeys) {
return differentKeys.indexOf(value) === index;
});
console.log(differentKeys);
如果您有任何问题,请告诉我。
我有一个对象数组。我想为数组中的每个元素获取与其他元素的区别。 例如,thi 是我的对象数组:
array= [{id:1, name= 'test', isAdmin: true, userMail:'test@test.com', userTel: '+12555555'},
{id:1, name= 'test', isAdmin: false, userMail:'test@test.com', userTel: '+12555555'}, {id:1,
name= 'test', isAdmin: false, userMail:'test@test.com', userTel: '+12555785444'}]
结果是:
result = [isAdmin, userMail, userTel]
我试过这个解决方案但没有用:
for (let index = 0; index < this.array.length; index++) {
const e = this.array[index];
let j = index + 1;
let t;
while (index !== j && j <= (this.array.length - 1) && t === undefined) {
t = this.difference(array);
j++;
}
let y;
if (t !== null && t !== undefined) {
Object.keys(t).forEach(key => {
if (key !== 'idTrace') {
y = key;
}
});
}
this.result.push(y);
}
difference(object, base) {
return transform(object, (result, value, key) => {
if (!isEqual(value, base[key])) {
result[key] = isObject(value) && isObject(base[key]) ?
this.difference(value, base[key]) : value;
}
});
}
任何帮助,在此先感谢。
你可以这样做。
请注意,这不是最高效的解决方案,但它是可以理解(可读)的解决方案,您可以根据需要对其进行优化。
const objects = [{
"id": 1,
"name": "test",
"isAdmin": true,
"userMail": "test@test.com",
"userTel": "+12555555"
},
{
"id": 1,
"name": "test",
"isAdmin": false,
"userMail": "test@test123.com",
"userTel": "+12555555"
},
{
"id": 1,
"name": "test",
"isAdmin": false,
"userMail": "test@test.com",
"userTel": "+12555785444"
}
];
// Finds all the keys that are different in two objects.
const difference = (obj1, obj2) => {
let foundKeys = [];
Object.keys(obj1).forEach(key => {
if (obj1[key] !== obj2[key]) {
foundKeys.push(key);
}
});
return foundKeys;
};
let differentKeys = [];
// Compares every object with all objects and pushes to one array all differences in keys.
for (let i = 0; i < objects.length; i++) {
for (let j = i + 1; j < objects.length; j++) {
differentKeys = differentKeys.concat(difference(objects[i], objects[j]));
}
}
// Removes duplicates.
differentKeys = differentKeys.filter(function(value, index, differentKeys) {
return differentKeys.indexOf(value) === index;
});
console.log(differentKeys);
如果您有任何问题,请告诉我。