javascript - NodeJS arr.splice() 未从数组中删除

标签 javascript arrays node.js

使用以下代码,我应该检查数组(ai、jq 和 rz)是否 拥有具有相同“兴趣”的用户,如果是,则从所有数组中删除该用户。 但当我记录数组时, .splice() 方法似乎不起作用,并且它们仍然包含该用户。有什么想法吗?

代码:

function joinQueue(sid, interests, fn) {
	var exists = false;
	
	interests.forEach(function(interest) {
		interest = interest.toLowerCase();
		getTable(interest.charAt(0), function(table) {
			table.forEach(function(data) {
				if(data.interest == interest && !exists) {
					var aa = 0;
					ai.forEach(function(a) {
						if(a.sid == data.sid) { ai.splice(aa, 1); console.log(ai);}
						aa++;
					});
					var jj = 0;
					jq.forEach(function(j) {
						if(j.sid == data.sid) { jq.splice(jj, 1); console.log(jq); }
						jj++;
					});
					var rr = 0;
					rz.forEach(function(r) {
						if(r.sid == data.sid) { rz.splice(rr, 1); console.log(rz); }
						rr++;
					});
					fn(data);
					exists = true;
				}
			});	
		});
	});
	if(!exists) {
		interests.forEach(function(interest) {
			interest = interest.toLowerCase();
			getTable(interest.charAt(0), function(table) {
				table.push({'sid': sid, 'interest': interest});
			});
		});
		fn();
	}
}

最佳答案

这是一个更安全的版本,它使用向后的 for 循环遍历来避免当前项被删除时出现问题。

function joinQueue(sid, interests, fn) {
    var exists = false;

    interests.forEach(function(interest) {
        interest = interest.toLowerCase();
        getTable(interest.charAt(0), function(table) {
            table.forEach(function(data) {
                if(data.interest == interest && !exists) {
                    var sid = data.sid;
                    var sliceItOff = function(arr) {
                        for (var i = arr.length - 1; i >= 0; i--) {
                            if(arr[i].sid == sid) { 
                                arr.splice(i, 1); 
                            }
                        }
                    };
                    sliceItOff(ai);
                    sliceItOff(jq);
                    sliceItOff(rz);
                    fn(data);
                    exists = true;
                }
            }); 
        });
    });
    if(!exists) {
        interests.forEach(function(interest) {
            interest = interest.toLowerCase();
            getTable(interest.charAt(0), function(table) {
                table.push({'sid': sid, 'interest': interest});
            });
        });
        fn();
    }
}

关于javascript - NodeJS arr.splice() 未从数组中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32470681/

相关文章:

node.js - 将前端和后端部署到 azure 上的同一 Web 服务

javascript - Node require 不是一个函数

javascript - 在 AngularJS 中实现锁屏(观察不活动)

javascript - 使用 html5 和 javascript 裁剪图像

javascript - 将 div 放在 div 顶部

javascript - 如何使用 jQuery 将一个 html 文档引用到 div 中的另一个 html 文档?

arrays - Mongodb 数组 - $pull 从嵌入文档

php - PDO 插入引发无法解释的 "Array to string conversion"错误

javascript - 检查数组中的部分匹配

python - 是否可以使用 2 种服务器端语言在同一域内呈现 2 个不同的网页