Javascript 删除 forEach 中的元素

标签 javascript arrays node.js foreach

我正在尝试创建一个可以从 forEach 循环内部删除元素的函数。

功能:

loopAndEdit = function(array,callback) {
    var helper = {
        data:{},
        get:function() {
            return helper.data;
        },
        remove:function() {
            index = array.indexOf(helper.data);
            array.splice(index,1);
            return true;
        }
    };

    tempArray = array;

    tempArray.forEach(function(row) {
        helper.data = row;
        callback(helper)
    });
}

为了测试它,我循环遍历一个数组并尝试删除所有元素:

names = ['abe','bob','chris'];

loopAndEdit(names,function(helper){
    console.log('Working on ' + helper.data);

    helper.remove();
});

console.log(names);

输出是:

Working on abe
Working on chris
[ 'bob' ]

我希望输出看起来像这样:

Working on abe
Working on bob
Working on chris
[]

我有一种感觉,可能是 helper.remove() 造成了麻烦,但目前我不确定。

感谢您的帮助!

最佳答案

这是因为当您在 forEach 循环中删除一项时,您的 forEach 循环无法循环遍历所有 3 个元素。

因此,假设您的 forEach 循环遍历了索引 0,然后遍历了索引 1,其中删除了索引 1。此时数组的长度更改为 n-1,但 for 循环内的索引仍然相同。

为了制作数组的副本,以便它不会更改原始数组。

这样做 -

var tempArray = names.slice(0);

而不是这个-

var tempArray = names;

关于Javascript 删除 forEach 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26387188/

相关文章:

javascript - Excel JavaScript API 无法读取工作表边缘与 IE 的范围

javascript - 两个圆圈应该跟随光标——一大一小(有延迟)

javascript - 如何使用来自字符串变量的参数调用java脚本函数

php,从mysql排序一个数组

php - 合并两个数组并按日期排序这个新数组

java - Jersey POST 参数值始终为 null,但与 curl 命令配合使用效果良好

Javascript数组检查值并分配到数组中

php - filetype() 的 Lstat 错误。遵循 php.net 中的示例

node.js - Node 组/用户管理框架

javascript - ESLint 一致返回和嵌套回调