Javascript 在推入数组之前删除重复的值

Javascript 在推入数组之前删除重复的值,javascript,angularjs,Javascript,Angularjs,在图像中可以看到,数组[0]和数组[3],数组和数组[4]是相同的。我正在检查值为何重复,但失败了。因此,如果存在任何重复值,则只需删除。我需要把它从电脑上删除 $scope.arr数组本身 代码: $scope.arr=[]; planReq.then(函数(调用计划列表){ $scope.callplanList=callplanList.data.callplans; //log($scope.callplanList); 对于(变量i=0;i

在图像中可以看到,数组[0]和数组[3],数组和数组[4]是相同的。我正在检查值为何重复,但失败了。因此,如果存在任何重复值,则只需删除。我需要把它从电脑上删除 $scope.arr数组本身

代码:

$scope.arr=[];
planReq.then(函数(调用计划列表){
$scope.callplanList=callplanList.data.callplans;
//log($scope.callplanList);
对于(变量i=0;i<$scope.planMapping.length;i++){
//log($scope.planMapping[i].PlanScode);
对于(var j=0;j<$scope.callplanList.length;j++){
if($scope.planMapping[i].PlanScode==$scope.callplanList[j].un_s_代码)和($scope.callplanList[j].offer_type==“REC”)){
//log($scope.devicesList);
对于(var a=0;a<$scope.callplanList[j]。前期成本。长度;a++){
if($scope.callplanList[j].upfront_cost[a].upfront!=“”){
//console.log($scope.callplanList[j].upfront_cost[a].handsetClass);
对于(变量k=0;k<$scope.devicesList.length;k++){
if($scope.callplanList[j]。前期成本[a]。handsetClass==$scope.DeviceList[k]。设备类。toLowerCase(){
$scope.arr.push($scope.devicesList[k]);
}
}
}
}
}
}
}
console.log($scope.arr);
});

任何帮助都将不胜感激。

方法1

var list =[{name:"a",age:2}, {name:"b",age:4}, {name:"c",age:6}, {name:"a",age:2}]
var arr = list.filter((elem, index, self) => self.findIndex(
    (t) => {return (t.name === elem.name && t.age === elem.age)}) === index)
它返回基于所有属性的唯一数组

方法2

如果要从数组中删除重复元素,请使用以下函数。以下是参数: myArr:包含数组对象 属性:对象的属性,通过该属性可以删除数组元素

function removeDuplicates(myArr, prop) {
  return myArr.filter((obj, pos, arr) => {
    return arr.map(mapObj => mapObj[prop]).indexOf(obj[prop]) === pos;
  });
}

它将根据elements属性删除重复项,并返回具有唯一元素的数组。

ngRepeat使用$watchCollection检测集合中的更改。当发生更改时,ngRepeat会对DOM进行相应的更改:

添加项时,模板的新实例将添加到DOM中。 删除项时,其模板实例将从DOM中删除。 当项目被重新排序时,它们各自的模板在DOM中被重新排序。 为了尽量减少DOM元素的创建,ngRepeat使用一个函数“跟踪”集合中的所有项及其对应的DOM元素。例如,如果将一个项添加到集合中,ngRepeat将知道所有其他项都已具有DOM元素,并且不会重新呈现它们

默认跟踪功能(通过项目标识跟踪项目)不允许在数组中重复项目。这是因为当存在重复项时,不可能在集合项和DOM元素之间保持一对一的映射

如果确实需要重复项目,可以使用“跟踪方式”表达式将默认跟踪行为替换为自己的跟踪行为

所以你可以这样做:

<div ng-repeat="n in [42, 42, 43, 43] track by $index">
 {{n}}
 </div>

使用过滤器

下面是一个简单的过滤器,用于从数组中删除重复项

Array.filter(函数(elem,index,self){return self.indexOf(elem)=index})

在你的情况下是这样的

$scope.arr =  $scope.arr.filter(function(elem, index, self){ 
                                  return self.indexOf(elem) == index 
                                });

我认为这是从阵列中删除重复项的最佳方法。请注意,这需要ES6

arr = Array.from(new Set(arr));
例如:

var-arr=[0,1,1,1,1,2,3,4,3,4,2,2,4];
console.log(arr.join(“,”);
arr=Array.from(新集合(arr));

console.log(arr.join(“,”)在ng Repeat上按曲目使用在ng Repeat中按索引使用曲目谢谢您的回答。但是我需要从$scope.arr中删除它。如果所有属性值都相同,我想从现有的$scope.arr数组中删除它自己。请尝试第1种方法。使用您的阵列而不是
list
,我是否应该将此代码添加到$scope.arr.push($scope.devicesList[k])之前;这个?在你的最后一个阵列准备好之后,然后放这条线。像这样,
$scope.arr.push($scope.devicesList[k])
$scope.arr=$scope.arr.filter(函数(elem,index,self){return self.indexOf(elem)==index})
$scope.arr =  $scope.arr.filter(function(elem, index, self){ 
                                  return self.indexOf(elem) == index 
                                });
arr = Array.from(new Set(arr));