如何在Javascript或Angularjs中找到相等的对象?
我面临一个关于对象比较的问题 我有两个javascript对象列表。如果对象属性完全相同,我应该如何过滤数据,然后复制到新的范围对象。如果使用AngularJs、Javascript或下划线js,是否有任何存档方法?我已经投进了JSFIDLE 我认为使用下划线是处理简单代码语法的最佳方法。 首先,我使用了一些下划线的方法,比如\uu.find,然后处理逻辑如何在Javascript或Angularjs中找到相等的对象?,javascript,angularjs,Javascript,Angularjs,我面临一个关于对象比较的问题 我有两个javascript对象列表。如果对象属性完全相同,我应该如何过滤数据,然后复制到新的范围对象。如果使用AngularJs、Javascript或下划线js,是否有任何存档方法?我已经投进了JSFIDLE 我认为使用下划线是处理简单代码语法的最佳方法。 首先,我使用了一些下划线的方法,比如\uu.find,然后处理逻辑 angular.forEach(obj1, function(v, k) { var isFind = _.find(obj2,
angular.forEach(obj1, function(v, k) {
var isFind = _.find(obj2, function(o) {
// some logic.
})
})
创建一个过滤器来检查对象,并使用javascript
filter和find
函数返回它
var arr = $scope.obj1.filter(o=> $scope.obj2.find(f=> JSON.stringify(o) === JSON.stringify(f) ));
console.log(arr)
角度模块(“应用程序”,[])
.controller(“ctrl”,函数($scope){
$scope.obj1=[];
$scope.obj2=[];
$scope.obj1.push({
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“22”,
样式:空,
Disper:10
},{
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“24”,
样式:空,
Disper:20
},{
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“80”,
样式:空,
Disper:15
});
$scope.obj2.push({
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“81”,
样式:空,
Disper:10
},{
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“24”,
样式:空,
Disper:20
},{
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“80”,
样式:空,
Disper:15
},{
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“81”,
样式:空,
Disper:8
},{
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“83”,
样式:空,
Disper:25
},{
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“84”,
样式:空,
Disper:30
});
var arr=$scope.obj1.filter(o=>$scope.obj2.find(f=>JSON.stringify(o)==JSON.stringify(f));
控制台日志(arr)
})
创建一个过滤器来检查对象,并使用javascript
过滤器和查找函数返回它
var arr = $scope.obj1.filter(o=> $scope.obj2.find(f=> JSON.stringify(o) === JSON.stringify(f) ));
console.log(arr)
角度模块(“应用程序”,[])
.controller(“ctrl”,函数($scope){
$scope.obj1=[];
$scope.obj2=[];
$scope.obj1.push({
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“22”,
样式:空,
Disper:10
},{
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“24”,
样式:空,
Disper:20
},{
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“80”,
样式:空,
Disper:15
});
$scope.obj2.push({
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“81”,
样式:空,
Disper:10
},{
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“24”,
样式:空,
Disper:20
},{
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“80”,
样式:空,
Disper:15
},{
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“81”,
样式:空,
Disper:8
},{
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“83”,
样式:空,
Disper:25
},{
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“84”,
样式:空,
Disper:30
});
var arr=$scope.obj1.filter(o=>$scope.obj2.find(f=>JSON.stringify(o)==JSON.stringify(f));
控制台日志(arr)
})
解决方案是将第一个数组中的每个对象与第二个数组中的每个对象进行比较,然后在第二个数组中没有等效对象的情况下构建一个新数组 “等效”被判断为具有相同数量的属性,并且一个对象的每个键:值对的值等于另一个对象的键:值 请注意,这并不复制对象,它只是在第一个数组中存储对相同对象的引用。如果要复制它们,请不要使用过滤器,而是使用reduce和Object.assign为结果数组创建新对象 使用此方法,属性的顺序无关紧要。这一点很重要,因为您无法保证它们将以任何特定的顺序排列,即使它们看起来与对象文字或其他构造的顺序相同。我混合了一些对象中的键:值对来说明这一点
var arr1=[{
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“22”,
样式:空,
Disper:10
}, {
代号:“1000”,
卡片类型:“24”,
样式:空,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
Disper:20
}, {
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“80”,
样式:空,
Disper:15
}];
var arr2=[{
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“81”,
样式:空,
Disper:10
}, {
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“24”,
样式:空,
Disper:20
}, {
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“80”,
样式:空,
Disper:15
}, {
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“81”,
样式:空,
Disper:8
}, {
代号:“1000”,
部门代码:“1201”,
品牌代码:空,
prodType:'C',
卡片类型:“83”,
样式:空,
Disper:25
}, {
prodType:'C',
卡片类型:“84”,
样式:空,
Disper:30,