Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度相等,每个项目都有深度比较和返回差_Javascript_Angularjs - Fatal编程技术网

Javascript 角度相等,每个项目都有深度比较和返回差

Javascript 角度相等,每个项目都有深度比较和返回差,javascript,angularjs,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' , ag

我想使用
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 }
];
现在执行
angular.equals(obj1,obj2)
将返回
false

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

假设
obj1
来自HTML表单,
obj2
来自服务

预期结果:

.id[1]姓名改为约翰,年龄改为25岁 或

。当我比较中的每个项目时,得到false或true。

Angular没有用于此的内置函数。你应该用图书馆来做这个

var first=[
{id:1,姓名:'john',年龄:30,身高:6},
{id:2,姓名:'ben',年龄:20岁,身高:5}
];
第二个变量=[
{id:1,姓名:'martin',年龄:25岁,身高:6},
{id:2,姓名:'ben',年龄:20岁,身高:5}
];
var结果=差异(第一,第二);
//结果=>[
//{kind:'E',path:[0,'name'],lhs:'john',rhs:'martin'},
//{种类:'E',路径:[0,'age'],左侧:30,右侧:25}
// ]
正如klode所述,有一个选项可以只使用角度进行深度比较,而无需附加依赖项:

angular.equals(obj1, obj2)

没有一种“开箱即用”的方式来实现这一点。最终,您只需要遍历每个数组值并进行比较。下划线/lodash可能会也可能不会在JS中提供的Array.prototype方法之外对您有所帮助。如果您有解决方案,请在JSFIDLE中共享。我正在努力比较并获得每个项目的确切差异。我没有解决方案,因为我还没有解决这个问题。你最好发布一些你所拥有的东西,并用你所尝试过的东西更新你的问题。马克·克莱恩,我已经更新了我在这里尝试过的解决方案,我只是用你所寻找的差异的一开始就更新了它:我使用了下划线,我想你会继续使用它。我建议熟悉一下它所提供的方法,因为你考虑了你要解决的问题。它没有解决OP对一个指示哪些项目已经改变的差异的请求。