2015-08-21 2 views
2

Я знаю, что это было задано несколько раз, но ни один из ответов, которые я видел, не помог. Итак, вот моя проблема.Проверка ошибок для дубликатов в массиве

У меня есть массив, который получает динамически заполняемый в зависимости от того, что выбрано из списка. Иногда значения массива, которые будут нажаты, будут иметь несколько одинаковых значений. Я хочу взять значения этого массива, найти, если это значение уже существует в массиве и нажать его в новый массив. У меня есть два глобальных массива, которые по умолчанию пусты.

//Global arrays 
var water_pipes_size_array = []; 
var new_water_pipes_size_array = []; 

Пример того, что water_pipes_size_array будет выглядеть так: [0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 10, 10, 8, 4, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

То, что я пытаюсь сделать, это поиск по этому массиву и найти повторяющиеся значения и подтолкнуть их в new_water_pipes_size_array. Однако то, что у меня есть, не работает. Я все еще получаю пустой массив.

for(var j = 0; j < water_pipes_size_array - 1; j++){ 
    if(water_pipes_size_array[j + 1] == water_pipes_size_array[j]){ 
     new_water_pipes_size_array.push(water_pipes_size_array[j]); 
    } 
} 
console.log(new_water_pipes_size_array); 

Может ли кто-нибудь показать мне, что я делаю неправильно, и предоставить некоторую обратную связь о том, как это исправить?

ответ

3

Я думаю, вы хотите поставить water_pipes_size_array.length в свою петлю for вместо water_pipes_size_array. Кроме того, поскольку вы начинаете с 0, вам не нужно вычитать 1:

for(var j = 0; j < water_pipes_size_array.length; j++){ 
    if(water_pipes_size_array[j + 1] == water_pipes_size_array[j]){ 
     new_water_pipes_size_array.push(water_pipes_size_array[j]); 
    } 
} 

Логика все не так. Если вы просто хотите, чтобы устранить дубликаты, попробуйте следующее:

for (var j = 0; j < water_pipes_size_array.length; j++) { 
    if (new_water_pipes_size_array.indexOf(water_pipes_size_array[j]) == -1) { 
     new_water_pipes_size_array.push(water_pipes_size_array[j]); 
    } 
} 
+0

Дерьмо. Спасибо. Я знал, что это может быть что-то простое. –

+1

@Robert см. Мое редактирование. –

+0

Можете ли вы объяснить, почему он проверяет, не равен ли индекс массива -1? –

0

Если вы можете использовать JQuery есть хороший способ для достижения этой

var water_pipes_size_array = [0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 10, 10, 8, 4, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; 
var new_water_pipes_size_array = []; 
new_water_pipes_size_array=$.map(water_pipes_size_array, function(value,index) { 
    return water_pipes_size_array[index+1]==value ? value : null; 
}); 
console.log(new_water_pipes_size_array); 
Смежные вопросы