如何从angularjs中的JavaScript数组中删除重复对象?
这是我的密码如何从angularjs中的JavaScript数组中删除重复对象?,javascript,javascript-objects,Javascript,Javascript Objects,这是我的密码 var studentsList=[ {“Id”:“101”,“name”:“siva”}, {“Id”:“101”,“name”:“siva”}, {“Id”:“102”,“name”:“hari”}, {“Id”:“103”,“name”:“rajesh”}, {“Id”:“103”,“name”:“rajesh”}, {“Id”:“104”,“name”:“ramesh”}, ]; 功能arr唯一(arr){ var=[]; 学生名单forEach(功能(itm){ var
var studentsList=[
{“Id”:“101”,“name”:“siva”},
{“Id”:“101”,“name”:“siva”},
{“Id”:“102”,“name”:“hari”},
{“Id”:“103”,“name”:“rajesh”},
{“Id”:“103”,“name”:“rajesh”},
{“Id”:“104”,“name”:“ramesh”},
];
功能arr唯一(arr){
var=[];
学生名单forEach(功能(itm){
var-unique=true;
已清洁。forEach(功能(itm2){
如果(u.isEqual(itm,itm2))unique=false;
});
如果(唯一)清洁,则推送(itm);
});
返回清洁;
}
var uniqueStandards=arrUnique(学生名单);
document.body.innerHTML=''+JSON.stringify(uniqueStandards,null,4)+''代码>这可能吗?(不是最有效的实施,但能完成任务):
var studentsList = [
{Id: "101", name: "siva"},
{Id: "101", name: "siva"},
{Id: "102", name: "hari"},
{Id: "103", name: "rajesh"},
{Id: "103", name: "rajesh"},
{Id: "104", name: "ramesh"},
];
var ids = {};
studentsList.forEach(function (student) {
ids[student.Id] = (ids[student.Id] || 0) + 1;
});
var output = [];
studentsList.forEach(function (student) {
if (ids[student.Id] === 1) output.push(student);
});
console.log(output);
编辑:如果学生按Id排序,则使用更快的方法:
app.controller('myCntrl',function($scope){
var seen = {};
//You can filter based on Id or Name based on the requirement
var uniqueStudents = studentsList.filter(function(item){
if(seen.hasOwnProperty(item.Id)){
return false;
}else{
seen[item.Id] = true;
return true;
}
});
$scope.students = uniqueStudents;
});
您可以使用javascript的过滤器方法:
上述问题的解决办法可以在fiddle中找到。
这个解决方案的性能会更好,因为我们使用的是纯javascript,并且没有第三方开销
var uniqueStandards = UniqueArraybyId(studentsList ,"id");
function UniqueArraybyId(collection, keyname) {
var output = [],
keys = [];
angular.forEach(collection, function(item) {
var key = item[keyname];
if(keys.indexOf(key) === -1) {
keys.push(key);
output.push(item);
}
});
return output;
};
如果您需要任何其他详细信息,请告诉我。检查此项
$scope.names= studentsList.reduce(function(array, place) {
if (array.indexOf( studentsList.name) < 0)
array.push( studentsList.name );
else
array.splice(array.indexOf( studentsList.name), 1);
return array;
}, []);
这是一个控制器,它将检测重复的元素并将其删除,并将为您提供没有重复的元素。用这个控制器就行了
var unique = arr.filter(function(elem, index, self) {
return index === self.indexOf(elem);
})
$scope.names=studentsList.reduce(函数(数组、位置){
if(array.indexOf(studentsList.name)<0)
array.push(studentsList.name);
其他的
array.splice(array.indexOf(studentsList.name),1);
返回数组;
}, []);
希望这适用于您的案例您可以使用librarylodash和methoduniqBy()
为什么不使用lodash或下划线库?使用lodash
提高效率:这与Angular有什么关系?我很惊讶,这完全不是他想要的。@varun-您的代码将返回像101102103104这样的唯一对象,但我想得到102104它接受区分大小写。这表明“电子学”和“电子学”是两个不同的词。请补充一些解释,说明为什么这个代码可以工作,所以这是一个更有用的答案。
var unique = arr.filter(function(elem, index, self) {
return index === self.indexOf(elem);
})