Как я могу распечатать этикетку, если соответствующая функция вызывается в console.log. Теперь он не печатает этикетку и результат?

#javascript

Вопрос:

Как я могу распечатать этикетку, если соответствующая функция вызывается в console.log. Теперь он не печатает этикетку и результат ? Может кто-нибудь, пожалуйста, посоветовать

     let num1 = 100;
    let num2 = 200;
    let text = 'add';
    calculationOfNumbers(text, num1, num2);
    
    function calculationOfNumbers(text, num1, num2) {
    if (text == 'add') {
        let label = "Adding";
        let result = addFunction(num1, num2);
        console.log(`This is : ${label}` result);
    } else if (text == 'subtract') {
        let label = "Subtracting";
        let result = subtractFunction(num1, num2);
        console.log(`This is : ${label}` result);
    }

}

function addFunction(num1, num2 ) {
    let result = parseInt(num1)   parseInt(num2);
    return resu<
}

function subtractFunction(num1, num2) {
    let result = parseInt(num2)  - parseInt(num1) ;
    return resu<
}
 

Комментарии:

1. JavaScript поддерживает возврат одного значения. Это значение должно быть записано в момент вызова функции, если вы хотите что-то с ним сделать. Учебник может быть хорошим местом для начала.

2. @DaveNewton Я понял свою ошибку , но я хотел бы знать, есть ли способ не писать объявление метки и журнал консоли дважды .

Ответ №1:

это return label, result ничего не делает. Это то же самое, что делать return result . Узнайте об операторе запятой. В JS еще нет типа данных кортежа.

Вместо этого вы могли бы сделать следующее:

 function addFunction(num1, num2, label) {
    let result = parseInt(num1)   parseInt(num2);
    return [label, result];
}
 
 function calculationOfNumbers(x, num1, num2) {
    let label, resu<
    if (x == 'add') {
       [label, result] = addFunction(num1, num2, "adding");
    } else if (x == 'subtract') {
       [label, result] = subtractFunction(num1, num2, "subtracting");
    }
    console.log(`This is : ${label} ${result}`);
}
 

т. е., возвращайте массивы и используйте деструкцию.

Или даже:

 function calculationOfNumbers(x, num1, num2) {
    let resu<
    if (x == 'add') {
       result = addFunction(num1, num2);
    } else if (x == 'subtract') {
       result = subtractFunction(num1, num2);
    }
    console.log(`This is: ${label} ${result}`);
}

function addFunction(num1, num2) {
    let result = parseInt(num1)   parseInt(num2);
    return label="adding", resu<
}

function subtractFunction(num1, num2) {
    let result = parseInt(num2)  - parseInt(num1) ;
    return label="subtracting", resu<
}
 

(Я не говорю, что это лучший подход, хотя)

Ответ №2:

Поскольку вы не можете возвращать несколько значений с помощью одного return оператора в JavaScript, один из вариантов, который вы могли бы использовать, — это вместо этого возвращать object примерно так:

 let total = 0;
let num1 = 100;
let num2 = 200;
let text = 'add';
let label = "";

calculationOfNumbers(text, num1, num2);

function calculationOfNumbers(x, num1, num2) {
    let info;

    if (x == 'add') {
        info = addFunction(num1, num2, "adding");
    } else if (x == 'subtract') {
        info = subtractFunction(num1, num2, "subtracting");
    }

    console.log(`This is ${info.label} : ${info.result}`);
}

function addFunction(num1, num2, label) {
    let result = parseInt(num1)   parseInt(num2);
    return { label, result };
}

function subtractFunction(num1, num2, label) {
    let result = parseInt(num2) - parseInt(num1);
    return { label, result };
} 

Обратите внимание , как я назначаю каждый вызов функции переменной info , после чего вы можете получить доступ к требуемым свойствам с info.label помощью и info.results , соответственно.

Ответ №3:

в вашем кодексе необходимо внести несколько изменений

 
 function calculationOfNumbers(x, num1, num2) {
    if (x == 'add') {
        // function is returning some values, but it was never stored somewhere to be used later
        addFunction(num1, num2, "adding");
    } else if (x == 'subtract') {
      // same situation, function is returning some values, but it was never stored somewhere to be used later
        subtractFunction(num1, num2, "subtracting");
    }
   // you are printing (result) but it was never declared before
    console.log(`This is : ${label}` result);
}

function addFunction(num1, num2, label) {
  // it's better to use Number(num1) instead of parseInt()
    let result = parseInt(num1)   parseInt(num2);
    // you are returning label inside here, however you didn't amend the global variable result,
// also no need to pass it down to this function, the add function should be returning only the result of the calculation
    return label, resu<
}

function subtractFunction(num1, num2, label) {
    let result = parseInt(num2)  - parseInt(num1) ;
    return label, resu<
}

 

Таким образом, код после внесения поправок должен выглядеть следующим образом:

 let num1 = 100;
let num2 = 200;
let text = 'add';

calculationOfNumbers(text, num1, num2);

function calculationOfNumbers(x, num1, num2) {
  let label = x;
  let result = 0;

  if (x == 'add') {
    result = addFunction(num1, num2);
  } else if (x == 'subtract') {
    result = subtractFunction(num1, num2);
  }
  console.log(`This is : ${label}`   result);
}

function addFunction(num1, num2) {
  let result = Number(num1)   Number(num2);
  return resu<
}

function subtractFunction(num1, num2) {
  let result = Number(num2) - Number(num1);
  return resu<
}