使用以下代码,我应该检查数组(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/