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

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

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

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

99 ответов

var a= [1, 2,2,3,3,4,4,4];
var m=[];
var n = [];
a.forEach(function(e) {
  if(m.indexOf(e)=== -1) {
    m.push(e);
}else if(n.indexOf(e)=== -1){
    n.push(e);
}

});

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

function getDuplicate(array) {
    return array.filter((value, index) => array.value !== index)
}
var arr = ['a','b','c','a'];

arr.filter( (item , index ) => {  
console.log(item , index , arr.indexOf(item) , arr.indexOf( item ) == index);
return index == arr.indexOf(item)
 } );

var array = ['a', 'b', 'c', 'a'];

function unique(array) {
    var unique_arr = [];
    array.forEach(function(i, e) {
        if (unique_arr.indexOf(i)===-1) unique_arr.push(i);
    });
    return unique_arr;
}
console.log(unique(array));

var arr = [4,5,1,1,2,3,4,4,7,5,2,6,10,9];
var sorted_arr = arr.sort();
var len = arr.length;
var results = [];
for (var i = 0; i < len; i++) {
  if (sorted_arr[i + 1] !== sorted_arr[i]) {
    results.push(sorted_arr[i]);
  }
}
document.write(results);

Меня спросили об этом в интервью. Мой ответ:

      List<int> getDublicates(List<int> x)
{
   List<int> result = new List<int>();
   while (x.Count>0)
   {
      int d = x[0];
      x.Remove(x[0]);
      if (x.Contains(d)) 
      result.Add(d);
   }
   return result;
}

у него хорошая производительность

Если вы хотите легко получить уникальное значение из массива, используя чистый javascript(который также работает с более старой версией браузера ecmascript5), взгляните на приведенный ниже код.

var arr = [9, 9, 111, 2, 3, 4, 4, 5, 7];
var result = [];
// If you do sorting or not this will result unique array value
arr.forEach(function(currentValue) {
    //Check weather current value exist or not based on that push in new array
    if (result.indexOf(currentValue) === -1) {
        result.push(currentValue);
    }
    
});

console.log(result);

Используя ES6(которая поддерживается в современном новейшем браузере) это можно сделать одной строкой

var arr = [9, 9, 111, 2, 3, 4, 4, 5, 7];
console.log(Array.from(new Set(arr)))

В этом посте было полезно проверить дубликаты, если вы используете 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!         }     });
//program to find the duplicate elements in arraylist

import java.util.ArrayList;
import java.util.Scanner;

public class DistinctEle 
{ 
    public static void main(String args[])
    {
        System.out.println("Enter elements");
        ArrayList<Integer> abc=new ArrayList<Integer>();
        ArrayList<Integer> ab=new ArrayList<Integer>();
        Scanner a=new Scanner(System.in);
        int b;
        for(int i=0;i<=10;i++)
        {
            b=a.nextInt();
            if(!abc.contains(b))
            {
                abc.add(b);
            }
            else
            {
                System.out.println("duplicate elements"+b);
            }
        }
    }
}
Другие вопросы по тегам