js сращивание массива удаляет элемент и лезет в яму

JavaScript

Рассмотрим следующие понятия:

// splice:返回从原始数组中删除的项(如果没有任何删除,则返回空数组)
	    // 当指定2个参数时,表示删除
	    // 当指定3个参数,且第2个参数为0时表示插入
	    // 当指定3个参数,且第2个参数为1时表示替换

На этот раз возьмем удаление в качестве примера. Мы хотим удалить указанный элемент в массиве. Нам нужно знать индекс массива, в котором он находится. Мы можем использовать array.indexOf, чтобы получить индекс, где он находится, а затем используйте splice для удаления элемента.

Это нормально само по себе

код показывает, как показано ниже:

var arr = ["张三","李四","王五","赵六"];

// 删除王五
arr.splice(arr.indexOf("王五"),1);

но. . . . . Вот в чем проблема.

Если он помещается в цикл for, например, в цикле массива, когда выполняется определенное условие, нам нужно удалить указанный элемент.

Но в цикле i каждый раз +1, но после того, как мы удаляем элемент, меняется индекс и соответствующая позиция.После того, как значение i увеличивается на единицу, следующий элемент будет пропущен.

Яма. . .

image

Поэтому при удалении элемента мы вручную уменьшаем значение i на единицу, чтобы избежать проблемы пропуска элемента.

Например: пройтись по массиву, когда значение свойства DasOperation равно неизменному, удалить эти данные из массива, а затем i-1

// 删除没有变化的,不传递到后台
for (let i = 0; i < this.CurrJobData.Content.length; i += 1) {
    if (this.CurrJobData.Content[i].DasOperation === '没变') {
       this.CurrJobData.Content.splice(this.CurrJobData.Content.indexOf(this.CurrJobData.Content[i]), 1);
        i -= 1;// 必须对i减去1,否则后面的一个元素会被跳过去
    }
}

Ну а чтобы больше друзья не сталкивались с ямами, выложу, надеюсь поможет.

Если есть проблема, укажите на нее и примите критику.

Личный публичный аккаунт WeChat:

image