角度等于每个项目的深度比较和回报差异

use*_*423 7 javascript angularjs

我想比较两个数组使用angular.equals并得到彼此不同的项目列表.

例如:

var obj1 = [
    { id: 1, name: 'john', age: 30, height: 6 },
    { id: 2, name: 'ben' , age: 20, height: 5 }
];
var obj2 = [
    { id: 1, name: 'martin', age: 25, height: 6 },
    { id: 2, name: 'ben'   , age: 20, height: 5 }
];
Run Code Online (Sandbox Code Playgroud)

现在做angular.equals(obj1, obj2)就会回来false.

在这里,我想比较不同数组中的每个项目,并在UI中显示时提醒差异或显示不同的颜色.

假设obj1来自HTML表单并且obj2来自服务.

结果预期:

.id [1]名称更改为john,年龄更改为25

.get false或true当我比较每个项目时.

小智 2

Angular 没有为此提供内置函数。为此,您应该使用库deep-diff 。

var first = [
    { id: 1, name: 'john', age: 30, height: 6 },
    { id: 2, name: 'ben' , age: 20, height: 5 }
];

var second = [
    { id: 1, name: 'martin', age: 25, height: 6 },
    { id: 2, name: 'ben'   , age: 20, height: 5 }
];

var result = diff(first, second);

// result => [
//    { kind: 'E', path: [0, 'name'], lhs: 'john', rhs: 'martin' },
//    { kind: 'E', path: [0, 'age' ], lhs: 30    , rhs: 25       }
// ]
Run Code Online (Sandbox Code Playgroud)