Duplicata possible:
moyen le plus simple de trouver des valeurs en double dans un tableau JavaScript
jQuery.unique sur un tableau de chaînes
J'essaie d'obtenir une liste de voisins par recherche en largeur (pour être précis: les index des boules voisines de même couleur dans Block'd ) ma function getWholeList(ballid)
retourne un tableau comme
thelist=["ball_1","ball_13","ball_23","ball_1"]
et bien sûr il y a des doublons.
J'ai essayé de les supprimer avec jQuery.unique (); mais cela ne fonctionne pas avec les chaînes, je suppose, alors y a-t-il un moyen pour cela (rendre le tableau unique)?
Merci pour toute aide..
La jQuery méthode unique
ne fonctionne que sur un tableau d'éléments DOM.
Vous pouvez facilement créer votre propre fonction uniqe en utilisant les méthodes each
et inArray
:
function unique(list) {
var result = [];
$.each(list, function(i, e) {
if ($.inArray(e, result) == -1) result.Push(e);
});
return result;
}
En tant que solution non jquery, vous pouvez utiliser la méthode Arrays filter
comme ceci:
var thelist=["ball_1","ball_13","ball_23","ball_1"],
thelistunique = thelist.filter(
function(a){if (!this[a]) {this[a] = 1; return a;}},
{}
);
//=> thelistunique = ["ball_1", "ball_13", "ball_23"]
Comme extension à Array.prototype
(en utilisant un rappel raccourci filter
)
Array.prototype.uniq = function(){
return this.filter(
function(a){return !this[a] ? this[a] = true : false;}, {}
);
}
thelistUnique = thelist.uniq(); //=> ["ball_1", "ball_13", "ball_23"]
[Edit 2017] Une version ES6 de ceci pourrait être:
Array.from(["ball_1","ball_13","ball_23","ball_1"]
.reduce( (a, b) => a.set(b, b) , new Map()))
.map( v => v[1] );
Essayez celui-ci - Array.unique ()
Array.prototype.unique =
function() {
var a = [];
var l = this.length;
for(var i=0; i<l; i++) {
for(var j=i+1; j<l; j++) {
// If this[i] is found later in the array
if (this[i] === this[j])
j = ++i;
}
a.Push(this[i]);
}
return a;
};
thelist=["ball_1","ball_13","ball_23","ball_1"]
thelist=thelist.unique()
jQuery.unique () ne fonctionne que pour un tableau d'éléments DOM. Jetez un œil à ceci (version améliorée d'unique):
Il existe un port JavaScript du PHP array_unique
fonction ici: http://phpjs.org/functions/array_unique
function array_unique (inputArr) {
var key = '',
tmp_arr2 = {},
val = '';
var __array_search = function (needle, haystack) {
var fkey = '';
for (fkey in haystack) {
if (haystack.hasOwnProperty(fkey)) {
if ((haystack[fkey] + '') === (needle + '')) {
return fkey;
}
}
}
return false;
};
for (key in inputArr) {
if (inputArr.hasOwnProperty(key)) {
val = inputArr[key];
if (false === __array_search(val, tmp_arr2)) {
tmp_arr2[key] = val;
}
}
}
return tmp_arr2;
}
Ou à partir de JS plus tard:
arr.filter((v, p) => arr.indexOf(v) == p)