Javascript 在推入数组之前删除重复的值
在图像中可以看到,数组[0]和数组[3],数组和数组[4]是相同的。我正在检查值为何重复,但失败了。因此,如果存在任何重复值,则只需删除。我需要把它从电脑上删除 $scope.arr数组本身 代码: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
$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));