Вычисление комбинации чисел

#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 Да, вы, вероятно, правы. Я это исправил.