我想拼接我的数组,所以我创建了这个代码片段:
System.log(finalcluster.length);
for (i=0; i <= finalcluster.length; i++){
if (finalcluster[i] != undefined ){
System.log(finalcluster[i][0]);
var remove = finalcluster.indexOf("dump");
if (finalcluster[i][0] == "dump")
{
System.log("couse dump");
finalcluster.splice(remove,1);
}
else {
System.log("No Problem");
}
}
}在这段代码中有两个remove函数,我知道是因为我尝试了一个整数i的indexof。
当我执行这段代码时,只删除了两个转储,我认为是前面的两个,但在我正确的结果之后,还有另一个“转储”数组。为什么split不能移动它,因为它可以从关键字之前拼接数组。
数组:
[Name][Number]
[dump][0]
[dump][0]
[KEYWORD][KEYNUMBER]
[dump][0]
[dump][0]这就是数组模型。
发布于 2017-09-09 02:17:09
代码的一个问题是,在更改(递减)数组长度的同时,使用finalcluster.length以升序迭代finalcluster。因此,每次满足remove条件时,循环运行的次数都会减少1,从而使数组的尾部不可达。示例:
// seems like this would empty out the array
let arr = [1, 2, 3, 4]
for (let i = 0; i < arr.length; i++) {
arr.splice(i, 1)
}
console.log(arr); // [2, 4]
可以通过以相反的顺序迭代finalcluster来避免此问题
let arr = [1, 2, 3, 4]
for (let i = arr.length - 1; i >= 0; i--) {
arr.splice(i, 1)
}
console.log(arr)
发布于 2017-09-09 02:09:02
如果不拼接,则需要递增i,或者拼接并递减i。到目前为止,拼接和递增跳过了背靠背的转储。
为了更好地解释它,你说转储在索引1和2。如果你在1处拼接,在索引2处的东西现在在索引1处,但你正在使我看索引2……
System.log(finalcluster.length);
for (i=0; i <= finalcluster.length;){
if (finalcluster[i] != undefined ){
System.log(finalcluster[i][0]);
var remove = finalcluster.indexOf("dump");
if (finalcluster[i][0] == "dump"){
System.log("couse dump");
finalcluster.splice(remove,1);
}else {
System.log("No Problem");
i++;
}
}
}如果不拼接,上面的代码将递增i。否则,它会将i保持在其当前索引,以避免跳过索引。
https://stackoverflow.com/questions/46121961
复制相似问题