Получить все неуникальные значения (т.е. дубликаты / более одного вхождения) в массиве - PullRequest
370 голосов
/ 08 мая 2009

Мне нужно проверить массив JavaScript, чтобы увидеть, есть ли какие-либо повторяющиеся значения. Какой самый простой способ сделать это? Мне просто нужно выяснить, что такое дублированные значения - мне не нужны их индексы или сколько раз они дублируются.

Я знаю, что могу перебрать массив и проверить все остальные значения на совпадение, но, похоже, должен быть более простой способ. Есть идеи? Спасибо!

Подобный вопрос:

Ответы [ 73 ]

0 голосов
/ 31 октября 2018

Вы можете продолжить сравнение индекса:

function getDuplicate(array) {
    return array.filter((value, index) => array.value !== index)
}
0 голосов
/ 21 марта 2017

Вы можете использовать следующую конструкцию:

var arr = [1,2,3,4,5,6,7,8,9,0,5];
var duplicate = arr.filter(function(item, i, arr) {
  return -1 !== arr.indexOf(item, i + 1);
})
0 голосов
/ 09 мая 2009

/ * Метод indexOf объекта Array полезен для сравнения элементов массива. IE - единственный крупный браузер, который изначально не поддерживает его, но его легко реализовать: * /

Array.prototype.indexOf= Array.prototype.indexOf || function(what, i){
    i= i || 0;
    var L= this.length;
    while(i<L){
        if(this[i]=== what) return i;
        ++i;
    }
    return -1;
}

function getarrayduplicates(arg){
    var itm, A= arg.slice(0, arg.length), dups= [];
    while(A.length){
        itm= A.shift();
        if(A.indexOf(itm)!= -1 && dups.indexOf(itm)== -1){
            dups[dups.length]= itm;
        }
    }
    return dups;
}

var a1 = [1, 22, 3, 2, 2, 3, 3, 4, 1, 22, 7, 8, 9];

оповещения (getarrayduplicates (а1));

Для очень больших массивов может быть быстрее удалить дубликаты из массива по мере их обнаружения, чтобы они больше не просматривались:

function getarrayduplicates(arg){
    var itm, A= arg.slice(0, arg.length), dups= [];
    while(A.length){
        itm= A.shift();
        if(A.indexOf(itm)!= -1){
            dups[dups.length]= itm;
            while(A.indexOf(itm)!= -1){
                A.splice(A.indexOf(itm), 1);
            }
        }
    }
    return dups;
}
0 голосов
/ 30 ноября 2018

Это однопетлевой подход с хэш-таблицей для подсчета элементов и фильтрации массива, если счет равен 2, поскольку он возвращает первый найденный дубликат.

Преимущество:

  • один цикл
  • использует объект для подсчета в замыкании

var array = [5, 0, 2, 1, 2, 3, 3, 4, 4, 8, 6, 7, 9, 4],
    duplicates = array.filter((h => v => (h[v] = (h[v] || 0) + 1) === 2)({}));
    
console.log(duplicates);
0 голосов
/ 08 мая 2009

Библиотека прототипов имеет функцию uniq , которая возвращает массив без дубликатов. Это только половина работы.

0 голосов
/ 10 июля 2017
var isUnique = true;      
for (var i= 0; i< targetItems.length; i++) {
        var itemValue = $(targetItems[i]).val();
        if (targetListValues.indexOf(itemValue) >= 0) {
          isUnique = false;
           break;
        }
      targetListValues.push(itemValue);
        if (!isUnique) {
          //raise any error msg
          return false;
        }
      }
0 голосов
/ 04 февраля 2013

Вот один из способов избежать дублирования в массиве javascript ... и он поддерживает строки и числа ...

 var unique = function(origArr) {
    var newArray = [],
        origLen = origArr.length,
        found,
        x = 0; y = 0;

    for ( x = 0; x < origLen; x++ ) {
        found = undefined;
        for ( y = 0; y < newArray.length; y++ ) {
            if ( origArr[x] === newArray[y] ) found = true;
        }
        if ( !found) newArray.push( origArr[x] );    
    }
   return newArray;
}

отметьте это скрипка ..

0 голосов
/ 27 февраля 2019

Самый простой способ извлечь дубликаты / повторяющиеся значения из массива / строки:

function getDuplicates(param) {
  var duplicates = {}

  for (var i = 0; i < param.length; i++) {
    var char = param[i]
    if (duplicates[char]) {
      duplicates[char]++
    } else {
      duplicates[char] = 1
    }
  }
  return duplicates
}

console.log(getDuplicates("aeiouaeiou"));
console.log(getDuplicates(["a", "e", "i", "o", "u", "a", "e"]));
console.log(getDuplicates([1, 2, 3, 4, 5, 1, 1, 2, 3]));
0 голосов
/ 12 ноября 2011
function remove_dups(arrayName){
  var newArray = new Array();

  label:for(var i=0; i<arrayName.length; i++ ){  

     for(var j=0; j<newArray.length;j++ ){
       if(newArray[j]==arrayName[i]){
         continue label;
       }
     }

     newArray[newArray.length] = arrayName[i];

  }

  return newArray;
}
0 голосов
/ 27 июля 2012

В этом посте было полезно проверить дубликаты, если вы используете Jquery.

Как найти дубликаты в массиве с помощью jquery

var unique_values = {}; var list_of_values = []; $('input[name$="recordset"]').     each(function(item) {          if ( ! unique_values[item.value] ) {             unique_values[item.value] = true;             list_of_values.push(item.value);         } else {             // We have duplicate values!         }     });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...