Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays_Angularjs - Fatal编程技术网

从另一个数组中的Javascript数组中删除元素

从另一个数组中的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

我在Angularjs应用程序中编写了一个javascript函数。简单地说,我需要做的是删除arr1中的所有项目,这些项目在arr2中也有(在arr2中重复)

//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;
}