#javascript #node.js #node-red
#javascript #node.js #узел -красный
Вопрос:
У меня есть задача, в которой мне нужно сгенерировать все возможные комбинации чисел от 0-0-0 до 100-100-100 (x, y, z)
var x = 0
var y = 0
var z = 0
while(true){
x
while(true){
y
while(true){
z
msg.payload = [x,y,z]
node.send(msg)
}}}
Проблема, с которой я сталкиваюсь, заключается в том, что значения x и y никогда не меняются (только один раз при вводе)…
Я думаю, что это неэффективный способ сделать это, есть какие-либо предложения?
Комментарии:
1. Это не полный пример кода, но я предполагаю, что проблема в msg.payload = [x, y, z] . Попробуйте вместо этого: пусть msg = {полезная нагрузка: [x, y, z]}
Ответ №1:
Если вы знаете количество итераций, проще использовать цикл for:
for (let x = 0; x <= 100; x) {
for (let y = 0; y <= 100; y) {
for (let z = 0; z <= 100; z) {
msg.payload = [x,y,z]
node.send(msg)
}
}
}
for (let x = 0; x <= 3; x) {
for (let y = 0; y <= 3; y) {
for (let z = 0; z <= 3; z) {
// msg.payload = [x,y,z]
// node.send(msg)
console.log({ payload: [x, y, z] });
}
}
}
Конечно, вы могли бы использовать вместо этого цикл while, но вы должны помнить о прерывании после 100 итераций:
let x = 0;
while(true) {
let y = 0;
while(true) {
let z = 0;
while(true) {
msg.payload = [x,y,z]
node.send(msg);
if (z === 100) break;
z ;
}
if (y === 100) break;
y ;
}
if (x === 100) break;
x ;
}
let x = 0;
while(true) {
let y = 0;
while(true) {
let z = 0;
while(true) {
// msg.payload = [x,y,z]
// node.send(msg);
console.log({ payload: [x, y, z] });
if (z === 3) break;
z ;
}
if (y === 3) break;
y ;
}
if (x === 3) break;
x ;
}
Или вы используете перевернутое условие прерывания для условия while:
let x = 0;
while(x <= 100) {
let y = 0;
while(y <= 100) {
let z = 0;
while(z <= 100) {
msg.payload = [x,y,z]
node.send(msg);
z ;
}
y ;
}
x ;
}
let x = 0;
while(x <= 3) {
let y = 0;
while(y <= 3) {
let z = 0;
while(z <= 3) {
// msg.payload = [x,y,z]
// node.send(msg);
console.log({ payload: [x, y, z] });
z ;
}
y ;
}
x ;
}
Комментарии:
1. Вероятно, потребуется <= для полного решения вопроса.
2. @CharlesBamford Да, вы, вероятно, правы. Я это исправил.