Ну, память кончилась. Потому что... так, представьте, что обрабатывается последний элемент вашего массива, и доходит очередь до вот этого:
array[i+1]=true;
Размер вашего массива увеличится, последний элемент перестанет быть последним, и цикл, вместо того, чтобы завершится, уйдёт на следующую итерацию. А там опять
array[i+1]=true;
(или
array[i+1]=false;
, в зависимости от условия) - массив снова увеличился, опять цикл не завершился, ну и так далее - массив будет жиреть до тех пор, пока станет невозможно выделить ему ещё памяти.
UPD. Я так понял, речь об
этой задаче.
Решается вот прям совсем просто.
Конечно, при использовании методов массива:
const ops = {
OR: arr => arr.some(Boolean),
AND: arr => arr.every(Boolean),
XOR: arr => !!arr.reduce((p, c) => p ^ c, 0),
};
const logicalCalc = (arr, op) => ops[op](arr);
В противном случае код может серьёзно опухнуть:
const ops = {
OR(arr) {
for (const n of arr) if (n) {
return true;
}
return false;
},
AND(arr) {
for (const n of arr) if (!n) {
return false;
}
return true;
},
XOR(arr) {
let result = 0;
for (const n of arr) {
result ^= n;
}
return !!result;
},
};