从另一个数组中的Javascript数组中删除元素
我在Angularjs应用程序中编写了一个javascript函数。简单地说,我需要做的是删除arr1中的所有项目,这些项目在arr2中也有(在arr2中重复)从另一个数组中的Javascript数组中删除元素,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我在Angularjs应用程序中编写了一个javascript函数。简单地说,我需要做的是删除arr1中的所有项目,这些项目在arr2中也有(在arr2中重复) //array1=array1-array2 $rootScope.removeArrayDuplicated=函数(arr1、arr2){ console.log('before'); 控制台日志(arr1); 对于(变量i=0;i
//array1=array1-array2
$rootScope.removeArrayDuplicated=函数(arr1、arr2){
console.log('before');
控制台日志(arr1);
对于(变量i=0;i
我在arr1的值之前和之后打印。但是我得到的数组前后都是相同的。我可能会出错。请给我看看
*数组包含json对象如果您使用: 看起来您正在根据项目名称进行“重复数据消除”。我可能会将所有名称放在地图中,以便更快地查找:
var dedupe = function(arr1, arr2) {
var nameMap = {};
arr2.forEach(function(item) {
nameMap[item.name] = true;
});
return arr1.filter(function(item) {
return !!nameMap[item.name];
});
});
第二个版本应缩放为O(N)(与原始版本的缩放为O(N^2)相反)。
$scope.removeArrayDuplicated = function(arr1, arr2) {
return arr1.filter(item => !(arr2.some(item2 => item.name === item2.name)));
}
这是通过巴别塔传输的es5代码
$scope.removeArrayDuplicated = function (arr1, arr2) {
return arr1.filter(function (item) {
return !arr2.some(function (item2) {
return item.name === item2.name;
});
});
};
您需要编辑原始数组还是可以构建新的输出数组 如果您可以构建一个新的输出数组,那么您需要的就是:
$rootScope.removeArrayDuplicated = function (arr1, arr2) {
var outputArray = [];
for (var i = 0; i < arr2.length; i++) {
var duplicate = false;
Inner: for (var j = 0; j < arr1.length; j++) {
if (arr2[i].name == arr1[j].name) {
console.log("inside " + arr2[i].name + " " + arr1[j].name);
duplicate = true;
break Inner;
}
}
if(!duplicate) {
outputArray.push(arr2[i].name);
}
}
return outputArray;
}
$rootScope.removeArrayDuplicated=函数(arr1、arr2){
变量输出阵列=[];
对于(变量i=0;i
尝试一些简单的方法,比如return arr1.filter((item)=>{return arr2.indexOf(item)===-1;}).differenceBy(arr1,arr2,'name')
我期待IE和Safari支持箭头功能@mgilson大多数人都在使用babel来使用更新的js功能。
$scope.removeArrayDuplicated = function (arr1, arr2) {
return arr1.filter(function (item) {
return !arr2.some(function (item2) {
return item.name === item2.name;
});
});
};
$rootScope.removeArrayDuplicated = function (arr1, arr2) {
var outputArray = [];
for (var i = 0; i < arr2.length; i++) {
var duplicate = false;
Inner: for (var j = 0; j < arr1.length; j++) {
if (arr2[i].name == arr1[j].name) {
console.log("inside " + arr2[i].name + " " + arr1[j].name);
duplicate = true;
break Inner;
}
}
if(!duplicate) {
outputArray.push(arr2[i].name);
}
}
return outputArray;
}