如何避免在 JavaScript 中的数组中出现未定义的成员
How to avoid having undefined members in an array in JavaScript?
问题很奇怪:我通过拼接函数从数组(关联)中删除了一些元素,之后我添加了一些元素,突然出现了"未完善"的元素。下面是日志(在"//"之后,这是我对此的评论):
// 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
并按索引修改元素。
相关文章:
- 为什么“;未定义的“;在JavaScript中结束循环
- 要求未定义JS回调参数
- 如何检查管道中未定义的项目
- TypeError:无法读取属性'推'未定义的JavaScript
- $window.ga在AngularJS事件中未定义
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- console.log表示,当我调用对象的任何成员时,对象都是未定义的
- 成员变为未定义
- 如何避免在 JavaScript 中的数组中出现未定义的成员
- Javascript 全局数组访问成员未定义
- 无法设置未定义成员的属性
- 隔离作用域成员在链接/控制器内更新,但在传递给控制器时未定义
- 删除对象成员而不留下未定义的最好方法是什么?
- Import语句返回未定义的模块成员
- Javascript类成员在子类中是未定义的
- 原型编程- Javascript错误:这个.如果窗体未定义,则无法在成员方法中获取对象变量
- __proto__为什么以及如何记住构造函数的旧属性's未定义的原型成员
- 回调中未定义的方法和成员
- 数组的成员是未定义的,它拥有获取该成员所需的所有数据