gpt4 book ai didi

javascript - JS - undefined object (但该对象已定义)

转载 作者:行者123 更新时间:2023-11-28 11:23:19 24 4
gpt4 key购买 nike

我有两个嵌套的 for 循环;基本上我想做的就是在包含文本行的数组中插入一些行;

我寻找占位符

'// <<<PERMISSIONS TREE>>>'

并在其后面插入一些行;在执行此操作之前,我检查在上述占位符之后和之前是否已经存在一些行

'// <<<END PERMISSIONS TREE>>>'

在这种情况下,我需要首先删除这些行,然后插入新行

for(i = 0; i < lines.length; i++) {
if (lines[i].indexOf('// <<<PERMISSIONS TREE>>>') >= 0) {

i++;
var j = i;
console.log(lines[j]); //here lines[j] is defined and printed on screen correctly
console.log(lines[j].indexOf('// <<<END PERMISSIONS TREE>>>')); //this also works

//start delete loop - the following line doesn't work
while ((lines[j].indexOf('// <<<END PERMISSIONS TREE>>>') < 0) && (j < lines.length)) {
lines.splice(j, 1);
j++;
}

lines.splice(i , 0, result); // insert result in the correct place, this works
break;
}
}

在启动 while 循环的行中,出现错误:

Cannot call method 'indexOf' of undefined

但是上面的两行(日志)有效;我就是不明白为什么...

这段代码在nodejs中运行,不知道这是否重要;

最佳答案

当您拼接时,您从数组中删除一个元素,并将其后面的每个元素的索引向下移动一位。如果您随后增加索引 j,则会犯一个差一错误。

arr = [1, 2, 3];
arr[1]; // 2
arr.splice(1, 1); // arr is now [1, 3]
arr[1]; // 3
arr.splice(1, 1); // arr is now [1]
arr[1]; // undefined

您可以通过不增加 j 来避免这种情况,因为它现在引用数组的新元素,这正是您想要的。

关于javascript - JS - undefined object (但该对象已定义),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26395377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com