C'est mon code
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"},
];
function arrUnique(arr) {
var cleaned = [];
studentsList.forEach(function(itm) {
var unique = true;
cleaned.forEach(function(itm2) {
if (_.isEqual(itm, itm2)) unique = false;
});
if (unique) cleaned.Push(itm);
});
return cleaned;
}
var uniqueStandards = arrUnique(studentsList);
document.body.innerHTML = '<pre>' + JSON.stringify(uniqueStandards, null, 4) + '</pre>';
Sortie
[
{
"Id": "101",
"name": "siva"
},
{
"Id": "102",
"name": "hari"
},
{
"Id": "103",
"name": "rajesh"
},
{
"Id": "104",
"name": "ramesh"
}
]
Dans le code ci-dessus, j'ai obtenu des objets uniques du tableau JavaScript, mais je veux supprimer les objets en double. Donc, je veux obtenir sans objets en double du tableau, la sortie comme [ { "Id": "102", "nom": "hari" }, { "Id": "104", "name": "ramesh" } ]
Vérifie ça
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;
};
Cela peut être? (pas l'implémentation la plus performante mais fait le travail):
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);
Edit: méthode plus rapide si les étudiants sont classés par ID :
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 output = [];
studentsList.reduce(function (isDup, student, index) {
var nextStudent = studentsList[index + 1];
if (nextStudent && student.Id === nextStudent.Id) {
return true;
} else if (isDup) {
return false;
} else {
output.Push(student);
}
return false;
}, false);
console.log(output);
Vous pouvez utiliser la méthode filter
de javascript:
La solution au problème ci-dessus se trouve dans this fiddle . Les performances de cette solution seront meilleures car nous utilisons du javascript pur et qu’il n’ya pas de surcharge de tiers.
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;
});
Faites-moi savoir si vous avez besoin d'autres détails.
Voici le contrôleur qui détectera l’élément dupliqué et le supprimera pour vous donner l’élément qui n’a pas de doublons Il suffit d'utiliser ce contrôleur
$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;
}, []);
J'espère que cela fonctionne pour votre cas