Javascript 拼接功能未按预期工作

Javascript 拼接功能未按预期工作,javascript,Javascript,我有这样一个数组: data: Array[8] 0: 3054 1: 1986 2: 1065 3: 1053 4: 666 5: 1423 6: 137 7: NaN data: Array[7] 0: 3054 1: 1986 2: 1065 3: 1053 4: 666 5: 1423 6: 137 allData[i] = allData[i].slice(0, -1) 为了删除NAN,我想将这个数组缩小到如下所示,所以我想要如下所示: data: Array[8] 0: 305

我有这样一个数组:

data: Array[8]
0: 3054
1: 1986
2: 1065
3: 1053
4: 666
5: 1423
6: 137
7: NaN
data: Array[7]
0: 3054
1: 1986
2: 1065
3: 1053
4: 666
5: 1423
6: 137
allData[i] = allData[i].slice(0, -1)
为了删除NAN,我想将这个数组缩小到如下所示,所以我想要如下所示:

data: Array[8]
0: 3054
1: 1986
2: 1065
3: 1053
4: 666
5: 1423
6: 137
7: NaN
data: Array[7]
0: 3054
1: 1986
2: 1065
3: 1053
4: 666
5: 1423
6: 137
allData[i] = allData[i].slice(0, -1)
根据本页:

我使用拼接如下:

allData[i].splice(allData[i].length-1, 1)
但它删除了数组中除NAN之外的所有元素

有人能帮我解决什么问题吗?

使用负值来去除末端:

allData[i].slice(0, -1)
参考文件:

作为负索引,end表示与序列末尾的偏移量。切片(2,-1)通过序列中倒数第二个元素提取第三个元素


但请注意,实际数组不会被触及,因为
slice
克隆了数组

因此,如果要操纵实际数组,需要按如下方式重新分配它:

data: Array[8]
0: 3054
1: 1986
2: 1065
3: 1053
4: 666
5: 1423
6: 137
7: NaN
data: Array[7]
0: 3054
1: 1986
2: 1065
3: 1053
4: 666
5: 1423
6: 137
allData[i] = allData[i].slice(0, -1)

如果要删除所有
NaN
元素,可以使用


如果它只是最后一个要删除的值,则可以调整数组的长度:


someArray.length=someArray.length-1

只需使用
allData[i].slice(0,-1)
它是否始终是您要删除的最后一个元素?跳过W3傻瓜。它们没用。试试这个:@W3Schools适合初学者。他们去那里很快学到了一些东西,发现了一些错误,并认识到学校不应该再被信任。这有什么不对:D?这不会从数组中删除任何内容。它会创建一个新的数组。如果有其他对原始数组的引用,则该数组无效。关键是他在问如何从数组中删除一个项,但这并没有做到。更不用说他的原始代码是正确的了。所描述的问题听起来像是他在分配
.splice()
的返回值,这当然是错误的。@cookiemonster“如果有其他对原始数组的引用,这是无用的”wtf“你在说其他引用在哪里?我们不知道“if”的定义吗?”?没关系。你没有改变数组。你的回答是一种替代方法,可能适合也可能不适合,这取决于具体情况,并且没有解释问题中的实际问题是什么。这是一种其他查找此问题的人可以使用的替代解决方案,它在问题的上下文中起作用。为什么会有这么多仇恨,兄弟?这不会从阵列中移除任何东西。它创建了一个新的。如果这对OP有效,那么实际的问题很可能是他存储了
.splice()
的返回值。我只是想问一个简单的问题,为什么它可以处理不同大小的数组?(据我所知,0表示第一个元素,-1表示第二个元素,它是如何工作的?@cookiemonster你说得对,它克隆了实际数组。@HamedMinaee负值表示它从末尾开始查看。因此它从末尾开始取第一个。
var allData[i]=
应该是
allData[i]=
,但是如果有其他对原始数组的引用,这仍然是一个问题,因为它们现在已经过时了。OP的原始代码是对现有数组进行变异的正确方法。+1,因为这是对数组进行实际变异的唯一答案,尽管原始代码也同样有效。