Как заменить все совпадения в массиве?
Здравствуйте, подскажите пожалуйста.
Есть код: 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, время: 01:02. |