【发布时间】:2016-03-07 00:52:11
【问题描述】:
这个输出有什么意义?也许我想错了,但它应该是 dong 似乎相当具有描述性
var dataset = [1, 2, 3];
dataset.forEach(function(element, index, array) {
// (index, how many to remove)
array.splice(0, 0);
});
returns [1,2,3] as expected
dataset.forEach(function(element, index, array) {
array.splice(0, 3);
});
returns [] as expected
dataset.forEach(function(element, index, array) {
array.splice(0, 1);
});
returns [3]
dataset.forEach(function(element, index, array) {
array.splice(0, 2);
});
returns [3]
这让我质疑我对一切的理解,哈哈。我有一个更复杂的要求,其中一个对象数组可能具有属性“element.archived”
var dataset = [Object, Object, Object]
dataset.forEach(function(element, index, array) {
if (element.archived) array.splice(index, 1);
});
我正在尝试遍历数组,并删除所有具有此属性值为 true 的对象。
【问题讨论】:
-
我认为您只是使用了错误的工具进行过滤。看来你需要简单的array.filter
-
你为什么在
array.spliceinsideforEach?您真的需要在阵列上运行splice3 次吗? -
@RocketHazmat,正是我的问题是什么。 OP,您似乎对how
spliceworks有误解。 -
splice修改索引,forEach从0开始并向上计数。当它到达未定义的索引时,它会停止。因为长度改变了,所以未定义的索引更早。因此forEach的调用次数少于初始长度次 -
@JasonMacAnLighiche:不要不要将您的解决方案编辑到问题中。这个问题应该是一个question。你应该做的是接受正确的答案。
标签: javascript foreach iteration