Как заменить все совпадения в массиве?
Здравствуйте, подскажите пожалуйста.
Есть код: var arr2 = ['0', '1', '2', '3', '4', '5', '4', '7', '8', '9', '4', '11']; и функция, которая в цикле пробегается по массиву и найдя все совпадения, заменяет их на no. function getRepeatArray(array) { var newArr = []; for (var j = 0; j < array.length; ++ j) { for (var k = j + 1; k < array.length; ++ k) { if (array[j] === array[k]) { array[j] = 'no'; array[k] = 'no'; } } } } getRepeatArray(arr2); Проблема в том, что ПОЧЕМУ ТО, заменяются не все совпадения, к примеру, сейчас у меня в консоли выводится следующее: ["0", "1", "2", "3", "no", "5", "no", "7", "8", "9", "4", "11"] Как видите последний символ 4 не заменился! Почему так, не могу понять, если оберу одну четверку и оставлю две, то обе заменятся в независимости от того, какую именно четверку я уберу. Может у кого-то есть свой вариант реализации подобного. Спасибо. |
Цитата:
Ты ведь сразу меняешь оригинал на no. ;) |
Armen, потому что к тому времени, последнюю четвёрку уже не с чем сравнить, так как первая четвёрка уже заменена на "no". Как вариант, создать дубликат массива и сравнивать в нём, а значения "no" записывать в оригинальный массив.
|
Цитата:
|
ksa, ну ты понял. :D
|
Цитата:
var arr2 = ['0', '1', '2', '3', '4', '5', '4', '7', '8', '9', '4', '11']; getRepeatArray(arr2); alert(arr2); function getRepeatArray(array) { for (var j = 0; j < array.length; ++ j) { var val=array[j]; if (val=='no') { continue; } for (var k = j + 1; k < array.length; ++ k) { if (val === array[k]) { array[j] = 'no'; array[k] = 'no'; }; }; }; }; |
var arr2 = ['0', '1', '2', '3', '4', '5', '4', '7', '8', '9', '4', '11']; function getRepeatArray(array) { var newArr = [].concat(array); for(var k, j = 0; j < array.length; ++j) { for(k = j + 1; k < array.length; ++k) { if(newArr[j] == newArr[k]) array[k] = array[j] = 'no'; } } alert(array); } getRepeatArray(arr2); |
:) вариант за 1 цикл ...
var arr2 = ['0', '1', '2', '3', '4', '5', '4', '7', '8', '9', '4', '11']; getRepeatArray(arr2); alert(arr2); function getRepeatArray(b) { for (var c = {}, a = 0; a < b.length; a++) { var d = b[a], e = c[d]; null != e ? (b[a] = "no", b[e] = "no") : c[d] = a } }; |
Часовой пояс GMT +3, время: 03:37. |