Подтвердить что ты не робот

JQuery - удалить дубликаты из массива строк

Возможный дубликат:
Самый простой способ найти повторяющиеся значения в массиве JavaScript
jQuery.unique в массиве строк

Я пытаюсь получить список соседей путем поиска по ширине (для конкретных: индексы одинаковых цветов соседних шаров в Block'd) my function getWholeList(ballid) возвращает массив вроде

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

и, конечно, есть дубликаты.

Я попытался удалить их с помощью jQuery.unique(); но он не работает со строками, я думаю, так есть ли способ для этого (что делает массив уникальным)?

Спасибо за любую помощь..

4b9b3361

Ответ 2

В качестве решения без jquery вы можете использовать метод Arrays filter следующим образом:

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

Как расширение до Array.prototype (с использованием укороченного обратного вызова 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"]

[ Изменить 2017]. ES6 может быть следующим:

Array.from(["ball_1","ball_13","ball_23","ball_1"]
           .reduce( (a, b) => a.set(b, b) , new Map()))
     .map( v => v[1] );

Ответ 3

Попробуйте этот 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()

Ответ 4

Здесь есть порт JavaScript функции PHP array_unique: 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;
}

Или как позже JS:

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

Ответ 5

jQuery.unique() работает только для массива элементов DOM. Взгляните на это (расширенная версия уникальной):

Улучшенный уникальный