J'ai un tableau avec obejcts email et Id donc je veux supprimer les éléments en double qui ont des identifiants similaires.
Exemple:
var newarray=[
{
Email:"[email protected]",
ID:"A"
},
{
Email:"[email protected]",
ID:"B"
},
{
Email:"[email protected]",
ID:"A"
},
{
Email:"[email protected]",
ID:"C"
},
{
Email:"[email protected]",
ID:"C"
}
];
Maintenant, je dois supprimer les éléments en double qui ont des identifiants sont communs.Par conséquent, je m'attends à la fin du tableau
var FinalArray=[
{
Email:"[email protected]",
ID:"A"
},
{
Email:"[email protected]",
ID:"B"
},
{
Email:"[email protected]",
ID:"C"
}
];
Utilisez Array.prototype.filter pour filtrer les éléments et conserver un contrôle des doublons, utilisez un tableau temp
.
var newarray = [{
Email: "[email protected]",
ID: "A"
}, {
Email: "[email protected]",
ID: "B"
}, {
Email: "[email protected]",
ID: "A"
}, {
Email: "[email protected]",
ID: "C"
}, {
Email: "[email protected]",
ID: "C"
}];
// Array to keep track of duplicates
var dups = [];
var arr = newarray.filter(function(el) {
// If it is not a duplicate, return true
if (dups.indexOf(el.ID) == -1) {
dups.Push(el.ID);
return true;
}
return false;
});
console.log(arr);
Vous pouvez le filtrer avec une table de hachage.
var newarray = [{ Email: "[email protected]", ID: "A" }, { Email: "[email protected]", ID: "B" }, { Email: "[email protected]", ID: "A" }, { Email: "[email protected]", ID: "C" }, { Email: "[email protected]", ID: "C" }],
filtered = newarray.filter(function (a) {
if (!this[a.ID]) {
this[a.ID] = true;
return true;
}
}, Object.create(null));
console.log(filtered);
.as-console-wrapper { max-height: 100% !important; top: 0; }
ES6 avec Set
var newarray = [{ Email: "[email protected]", ID: "A" }, { Email: "[email protected]", ID: "B" }, { Email: "[email protected]", ID: "A" }, { Email: "[email protected]", ID: "C" }, { Email: "[email protected]", ID: "C" }],
filtered = newarray.filter((s => a => !s.has(a.ID) && s.add(a.ID))(new Set));
console.log(filtered);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Si vous pouvez utiliser des bibliothèques Javascript telles que underscore ou lodash, je vous recommande de consulter la fonction _.uniq dans leurs bibliothèques. De Lodash:
_.uniq(array, [isSorted=false], [callback=_.identity], [thisArg])
Ici vous devez utiliser comme ci-dessous,
var non_duplidated_data = _.uniq(newarray, 'ID');
Une autre solution utilisant Array.prototype.reduce
et une table de hachage - voir la démo ci-dessous:
var newarray=[ { Email:"[email protected]", ID:"A" }, { Email:"[email protected]", ID:"B" }, { Email:"[email protected]", ID:"A" }, { Email:"[email protected]", ID:"C" }, { Email:"[email protected]", ID:"C" } ];
var result = newarray.reduce(function(hash){
return function(prev,curr){
!hash[curr.ID] && (hash[curr.ID]=prev.Push(curr));
return prev;
};
}(Object.create(null)),[]);
console.log(result);
.as-console-wrapper{top:0;max-height:100%!important;}