jQuery – entfernt Duplikate aus einem Array von Strings [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
Leere

Mögliches Duplikat:

Einfachste Möglichkeit, doppelte Werte in einem JavaScript-Array zu finden
jQuery.unique auf einem Array von Strings

Ich versuche, eine Nachbarliste durch Breitensuche zu erhalten (um genau zu sein: die Indizes gleichfarbiger Nachbarbälle in Blockiert) mein function getWholeList(ballid) gib ein Array wie zurück

thelist=["ball_1","ball_13","ball_23","ball_1"]

und natürlich gibt es Duplikate.

Ich habe versucht, sie mit jQuery.unique() zu entfernen; aber es funktioniert nicht mit Strings, denke ich, also gibt es eine Möglichkeit dafür (das Array eindeutig zu machen)?

Danke für jede Hilfe..

  • schau dir das an: stackoverflow.com/questions/840781/…

    – kleinohad

    23. September 2012 um 10:42 Uhr

  • @kleinohad: Markieren Sie es einfach als Duplikat

    – Bergi

    23. September 2012 um 11:32 Uhr

  • Danke für alle Antworten, ich habe die benötigte Funktion in diesem Thema gefunden

    – Leere

    23. September 2012 um 12:05 Uhr


  • für mich $.unique funktioniert es: jsfiddle.net/8RNYF

    – jd.carretero

    15. Juli 2014 um 11:12 Uhr


Benutzer-Avatar
Guffa

Die jQuery unique Methode funktioniert nur auf einem Array von DOM-Elementen.

Sie können ganz einfach Ihre eigene einzigartige Funktion erstellen, indem Sie die verwenden each und inArray Methoden:

function unique(list) {
  var result = [];
  $.each(list, function(i, e) {
    if ($.inArray(e, result) == -1) result.push(e);
  });
  return result;
}

Demo: http://jsfiddle.net/Guffa/Askwb/

  • verwenden grep ist auch gut: function unique(list) { return $.grep(list, function(n, i) { return list.indexOf(n) == i; }); }

    – Elin

    17. Oktober 2019 um 23:51 Uhr


Benutzer-Avatar
KooiInc

Als Nicht-Jquery-Lösung könnten Sie die Arrays verwenden filter Methode so:

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"]

Als Erweiterung zu Array.prototype (unter Verwendung einer verkürzten filter zurückrufen)

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] Ein ES6-Ansatz dazu könnte sein:

const unique = arr => [...new Set(arr)];
const someArr = ["ball_1","ball_13","ball_23","ball_1", "ball_13", "ball_1" ];
console.log( unique(someArr) );

Probier diese – 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()

  • Versuchen Sie dies jedoch nicht auf großen Arrays, dies hat eine quadratische Komplexität

    – catchmeifyoutry

    23. September 2012 um 10:48 Uhr

  • sortiert das nicht auch das Array? Manchmal ist dies unerwünscht

    – maximal glatter

    13. Juni 2014 um 21:30 Uhr

jQuery.unique() funktioniert nur für Arrays von DOM-Elementen. Schauen Sie sich das an (erweiterte Version von Unique):

Verbessertes Unikat

Benutzer-Avatar
Petah

Es gibt eine JavaScript-Portierung von PHP array_unique Funktion hier: 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;
}

Oder ab später JS:

arr.filter((v, p) => arr.indexOf(v) == p)

1216300cookie-checkjQuery – entfernt Duplikate aus einem Array von Strings [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy