如何避免在 JavaScript 中的数组中出现未定义的成员

How to avoid having undefined members in an array in JavaScript?

本文关键字:未定义 成员 数组 JavaScript 何避免      更新时间:2023-09-26

问题很奇怪:我通过拼接函数从数组(关联)中删除了一些元素,之后我添加了一些元素,突然出现了"未完善"的元素。下面是日志(在"//"之后,这是我对此的评论):

// adding first element; array length = 1
["asdasdasd"] microblog.js:48
// adding second element; array length = 2
["asdasdasd", "asdasdasd"] microblog.js:48 
// adding third element;  array length = 3
["asdasdasd", "asdasdasd", "asdasdasdqwe"] microblog.js:48 
// removing second element;  array length = 2
["asdasdasd", "asdasdasdqwe"] microblog.js:66 
// removing third element; array length = 1
["asdasdasdqwe"] microblog.js:66
// adding new element;  array length = 4
["asdasdasdqwe", undefined × 2, "asdasdqwrevcvxzvvxwfrqeqwewq"] 

这就是我添加元素的方式:

(...)
this.list[currId] = text;
(...)

这就是我删除元素的方式

(...)
this.list.splice(currId, 1);
(...)

如何避免这些未定义的元素?

要么 A) -> 你正在使用当前元素来跟踪下一个添加的位置,并且永远不会减少它:

var arr = []
for (var currId = 0; currId < 4; currId++) {
    arr[currId] = currID
}
//arr = [1, 2, 3, 4]
arr.splice(1, 3); // arr = [1]
// if currID is still 3
arr[currId] = "text"; // now arr = [1, undefined, undefined, "text"]

在这种情况下,您需要在删除项目时减少 currId,以将它们添加到下一个位置。

B) ->只使用Array.push()

var arr = []
for (var currId = 0; currId < 4; currId++) {
    arr.push(currId);
}
//arr = [1, 2, 3, 4]
arr.splice(1, 3); // arr = [1]
arr.push("text"); // now arr = [1, "text"]

B 是一个更好的解决方案,如果只是将元素添加到数组的末尾是您想要的。

编辑:由于您想将"currID"保留为数组中放置项目的下一个位置,因此我假设每当您执行此操作时,

this.list[currId] = text;

你按照这个来遵循它:

currId++;

如果这是正确的,那么相反的做法是在将对象拼接出数组时减少它,例如:

var arr = [1, 2, 3, 4];
currId = 4 // The next position to add at is 4.
removeCount = 3;
arr.splice(1, removeCount); // arr = [1]
currId -= removeCount;

但坦率地说,这是一种糟糕的方法。请提供更多信息,以便我们帮助您找到更好的方法。

希望这有帮助。

你的currId是干什么用的?

添加元素(到末尾)时,您应该这样做:

this.list.push(text)

this.list[this.list.length] = text

并按索引修改元素。