Используя следующий код, я должен проверить, есть ли в массивах (ai, jq и rz) пользователи с тем же «интересом», и если да, удалите это пользователя из всех массивов. Но кажется, что метод .splice() не работает, когда я регистрирую массивы, и они все еще содержат этого пользователя. Есть идеи?NodeJS arr.splice() не удаляется из массива
Код:
function joinQueue(sid, interests, fn) {
\t var exists = false;
\t
\t interests.forEach(function(interest) {
\t \t interest = interest.toLowerCase();
\t \t getTable(interest.charAt(0), function(table) {
\t \t \t table.forEach(function(data) {
\t \t \t \t if(data.interest == interest && !exists) {
\t \t \t \t \t var aa = 0;
\t \t \t \t \t ai.forEach(function(a) {
\t \t \t \t \t \t if(a.sid == data.sid) { ai.splice(aa, 1); console.log(ai);}
\t \t \t \t \t \t aa++;
\t \t \t \t \t });
\t \t \t \t \t var jj = 0;
\t \t \t \t \t jq.forEach(function(j) {
\t \t \t \t \t \t if(j.sid == data.sid) { jq.splice(jj, 1); console.log(jq); }
\t \t \t \t \t \t jj++;
\t \t \t \t \t });
\t \t \t \t \t var rr = 0;
\t \t \t \t \t rz.forEach(function(r) {
\t \t \t \t \t \t if(r.sid == data.sid) { rz.splice(rr, 1); console.log(rz); }
\t \t \t \t \t \t rr++;
\t \t \t \t \t });
\t \t \t \t \t fn(data);
\t \t \t \t \t exists = true;
\t \t \t \t }
\t \t \t }); \t
\t \t });
\t });
\t if(!exists) {
\t \t interests.forEach(function(interest) {
\t \t \t interest = interest.toLowerCase();
\t \t \t getTable(interest.charAt(0), function(table) {
\t \t \t \t table.push({'sid': sid, 'interest': interest});
\t \t \t });
\t \t });
\t \t fn();
\t }
}
Можете ли вы предоставить данные, переданные в joinQueue? sid, интересы, fn. Первое, что нужно проверить, - это когда-либо исполняемый код после 'a.sid === data.sid'. – widged
'jq.forEach (function (j, i) {/ * делать то, что добавляет или удаляет элементы в массиве * /}', как правило, не очень хорошая идея. Попробуйте использовать [] .concat (jq) .forEach (d , i) или jq.slice (0). Таким образом, вы будете перебирать клон массива. – widged
Что вы ожидаете, когда находитесь в середине нескольких итераций 'jq.forEach()' и вы вызываете 'jq.splice()' внутри обратного вызова? – jfriend00