Метод сплайсинга не принимает переменную для удаления элемента из массива javascript
У меня есть объект со строковыми значениями, прикрепленными к тому же свойству, которое я хочу удалить с помощью функции, если это значение присутствует. Чтобы добиться этого, я поместил строковые значения в массив, прошел через них и хочу удалить значение, используя splice()
, Проблема в том, что splice()
кажется, не распознает счетчик массива. Он всегда удаляет первый элемент в массиве, даже если счетчик выше. Я проверил код и цикл работает правильно.
Я не видел ничего в Интернете, чтобы предположить, что splice
не может использоваться с переменной в индексе. Как я могу сделать splice
использовать счетчик для удаления относительного значения?
var obj = {
className: 'open menu next thing'
}
function removeClass(elem, cls) {
var arr = elem.className.split(' ');
for(var i = 0; i < arr.length; i++) {
if(arr[i] == cls) {
alert(arr[i]);
var splCout = arr.splice(arr[i], 1);
alert(splCout);
}
}
var str = arr.join(' ');
alert(str);
}
removeClass(obj, 'next');
1 ответ
У вас есть 2 разных проблемы, которые нужно исправить:
1- вы изменяете объект массива в цикле for после первого splice
массив изменен и arr.length
полностью отличается для остальных элементов цикла, чтобы предотвратить создание такой переменной, как len
и установите его на длину вашего массива один раз.
но если вы измените цикл наоборот, он понадобится один раз:
for(var i = arr.length; i >= 0; i--) {
if(arr[i] == cls) {
alert(arr[i - 1]);
var splCout = arr.splice(arr[i - 1], 1);
alert(splCout);
}
}
2- следующая и более важная проблема - это индексы массива, когда вы удаляете индекс, другие индексы меняются (i...... n), и код не будет работать должным образом, но, как вы видите, когда вы итерируйте массив таким образом, даже когда вы удаляете индекс, остальные индексы обратно в ноль (i....0) не изменяются.