2015-11-09 5 views
0

Этот вопрос может выглядеть очень похоже на [ ] [1] Remove Duplicates from JavaScript Array, но это действительно разные: Мне нужно найти одинаковые элементы в массиве и удалить их все, например,Как удалить элементы сопряжения в массиве javascript?

var arr1 = ["andesite", "grass", "dirt", "pink wool", "dead shrub", "grass"]; 

результат должен :

var arr1 = ["andesite", "dirt", "pink wool", "dead shrub"]; 

Что я хочу, так это узнать, что «трава» идет туда дважды и исключает из массива. Я пытался что-то вроде

function inArray(arr){ 
var index = []; 
var count = arr.length; 
for(var i=0;i<count;i++){ 

    if(arr[i] in index){ 

     arr.splice([i],1);   

     }else{ 
      index1.push(arr[i]); 
     } 
    } 
return arr; 

} но она удаляет только второй дублирующий элемент при сравнении его с первым.

Заранее благодарю за любой ответ. Для меня это воспитательная задача, поэтому я буду очень благодарен за объяснения, как это работает.

+0

вот один из способов сделать это: 1) сделать проход по массиву и выяснить, какие элементы появляются более одного раза -> сохранить их где-то отчетливо. 2) сделайте второй проход по массиву и удалите все те предметы, которые вы сохранили до – Banana

ответ

2

Итак, первый шаг - это, конечно же, определить, какие элементы вы хотите удалить. Второй шаг - удалить их.

Идентификация дубликатов достаточно проста и может быть выполнена несколькими способами. Вот как я это сделать:

var counts = {}; 
for(var i=0, l=arr.length; i<l; i++) { 
    counts[arr[i]] = (counts[arr[i]] || 0) + 1; 
} 

Любой ключ в counts, что имеет значение больше, чем 1 будет теперь необходимо удаление. Это тоже очень просто:

var result = arr.filter(function(item) { 
    return counts[item] <= 1; 
}); 

И ... сделано! Это отфильтрует любые элементы, где counts[item] <= 1 не удался, эффективно удалив любой элемент, который появился дважды или более. Это так просто ^^

+0

Большое вам спасибо! Я понял, как используется Object здесь – Max

Смежные вопросы