Метод сплайсинга не принимает переменную для удаления элемента из массива 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) не изменяются.

Другие вопросы по тегам