使用循环从数组中删除了第一个元素,但最后一个元素存储在 "undefined" 中 Javascript

Removed the first element from the Array with a loop but the last element stored "undefined" in Javascript

所以我在学习数据结构时,我对数组感到困惑,并且在一个问题中,我在哪里必须从数组中删除第一个(第 0 个元素)元素。我理解其中的逻辑,但无法理解为什么最后一个索引处的元素被更改并且现在存储为“未定义”。 下面是输出代码

//remove first element
let numbers = ["A","B","C","D"];
console.log(numbers);
for(let i=0 ;i<numbers.length;i++){
    numbers[i] = numbers[i+1];
}
console.log(numbers)

这是输出

[ 'A', 'B', 'C', 'D' ]
[ 'B', 'C', 'D', undefined ]

为什么现在最后一个元素未定义?

因为数组在 javascript 中是从零开始的,所以最终在循环的最后一次交互中,您将数组的最后一个元素设置为比实际值多 1,以便最后一个元素设置为未定义。

你实际上并没有从数组中删除元素,你最终所做的只是改变了元素在数组中的位置。最后一个元素是未定义的,因为 D 之后没有值,因此当您分配给 numbers[3] 时,值变为未定义。

numbers[4] = does not exist
numbers[3] = “D” 
numbers[2]= “C”
numbers[1]= “B”
numbers[0] = “A”

After change

numbers[3] = undefined
numbers[2]= “D”
numbers[1]= “C”
numbers[0] = “B”

最好用numbers.shift()去掉第一个元素

numbers[3] = “D” 
numbers[2]= “C”
numbers[1]= “B”
numbers[0] = “A”

After change

numbers[2]= “D”
numbers[1]= “C”
numbers[0] = “B”

因为你的数组中没有“d”+ 1 元素,所以如果你尝试 return 不在你的数组中的元素,你总是会得到未定义的

如果要删除数组中的第一项,请使用 shift 方法。它在最后一次迭代 i+1 = 4 中的未定义原因,所以 numbers[4] 不存在。

let numbers = ["A","B","C","D"];
console.log(numbers);

numbers.shift();
console.log(numbers);

What happend inside your code?

您是 运行 遍历数组的 for 循环,它将 nth 元素分配给 n+1th 元素。这导致将 1st 元素分配给 0th 元素,2nd 元素分配给 1st3rd 分配给 2nd 等等。这导致将当前为 'D'3rd 元素分配给 4th 元素。数组的长度是 4,所以数组的 4th 元素 i,e, numbers[4] 将是 undefined.

您的问题的确切解决方案。使用 Array.prototype.splice()

let numbers = ["A","B","C","D"];
console.log(numbers);
numbers.splice(0, 1)
console.log(numbers)