使用拼接删除数组中的项目

时间:2020-03-21 01:04:57

标签: javascript

为什么原始数组中的剩余数= [1、3、5、7、9]

由于arr.splice(i,1)= i是目标索引并且1是要删除的项目数,所以i分别从i ++增加到10,这是i = i + 1的简称,所以为什么呢删除5索引并在数组中保留5?到目前为止,这是我所知道的,我一直在努力阅读文档,但仍然不知道要理解,请为我解释一下

let arr = [1,2,3,4,5,6,7,8,9,10];

for(let i = 1; i < arr.length; i++) {
    arr.splice(i, 1);

}

4 个答案:

答案 0 :(得分:2)

这是因为每次拼接功能运行时arr的长度都会减小。 这是数组的变化方式。

[2, 3, 4, 5, 6, 7, 8, 9, 10]
[2, 4, 5, 6, 7, 8, 9, 10]
[2, 4, 6, 7, 8, 9, 10]
[2, 4, 6, 8, 9, 10]
[2, 4, 6, 8, 10]

所以每个循环,i都会增加,而arr.length会减少1。因此,只有5个循环运行,结果是[2,4,6,6,8,10]

答案 1 :(得分:0)

您想知道为什么要删除1,3、5、7和9,对吗?

这就是原因。随着for循环的迭代,i不断增加一。 但是,通过调用.splice,您将删除数组的第一个元素,因此,所有其他元素都向下移动索引。

让我们逐步进行一下for循环的迭代。

i = 0; arr.splice(0, 1)删除1,因此arr[2, 3, 4, 5, 6, 7, 8, 9, 10]

i = 1; arr.splice(1, 1)删除了 3 而不是2,因为现在3在arr的索引1处。执行拼接将arr保留为[2, 4, 5, 6, 7, 8, 9, 10]

i = 2; arr.splice(2, 1)删除5,因为5当前位于索引2。结果,arr变成[2, 4, 6, 7, 8, 9, 10]

现在不清楚发生了什么吗?

如果您的目标是每次依次删除每个元素,则不要在循环的每次迭代中调用.splice(i, 1),而应调用.splice(0, 1),因为索引0的值会更改每次您致电.splice

答案 2 :(得分:0)

您需要检查for循环结束条件,我没有增加到10。为什么?因为我<长度 所以会这样:

迭代1:

i=0; arr.length = 10; arr = [1,2,3,4,5,6,7,8,9,10]; ==> result [2,3,4,5,6,7,8,9,10]; 

迭代2:

i=1; arr.length = 9; arr = [2,3,4,5,6,7,8,9,10];  ==> result [2,4,5,6,7,8,9,10]; 

迭代3:

i=2; arr.length = 8; arr = [2,4,5,6,7,8,9,10];  ==> result [2,4,6,7,8,9,10]; 

。 。 。等等

i = 5 ==> arr.length: 5 ==> final result : [2, 4, 6, 8, 10]

因此,如果要使用拼接删除所有项目:

let arr = [1,2,3,4,5,6,7,8,9,10];

while(arr.length > 0) {

    arr.splice(0, 1);

}

答案 3 :(得分:0)

请记住,数组基于0。其次,每次评估时长度都会改变。

MDN链接:

Splice

Map

所以您可能想尝试

split(":")

确定长度并预先设置长度和常数。您可以尝试将阵列映射到新阵列,以使原始阵列保持纯净,不受接头影响。