【问题标题】:My return value appears as NaN and I don’t know why [duplicate]我的返回值显示为 NaN,我不知道为什么 [重复]
【发布时间】:2020-07-02 23:58:02
【问题描述】:

我正在尝试遍历数组并将所有数组值加到 totalValue 变量中。

const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8],
  validateCred = (arr) => {
    let totalValue;

    for (let i = arr.length - 1; i >= 0; i--) {
      let number = arr[i] * 2;

      if (number > 9) {
        totalValue += number - 9;
      }
      else {
        totalValue += number;
      }
    }

    return totalValue;
  };

console.log(validateCred(valid1));

【问题讨论】:

  • 这看起来是reduce 的好去处。 const validateCred = arr => arr.reduceRight((acc, cur) => acc + (cur > 4.5 ? cur * 2 - 9 : cur * 2)); 将是相同的功能。

标签: javascript loops


【解决方案1】:

totalValue初始值,现在它正在将数字添加到undefined,结果是NaN

const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8]


const validateCred = (arr) => {
let totalValue = 0
   for (let i = arr.length - 1; i >= 0; i--) {
       let number = arr[i] *2
       if (number > 9) {
           totalValue += number - 9
       } else {
           totalValue += number
       }
   }
   return totalValue
}

console.log(validateCred(valid1))

你也可以像这样使用Array.reduce方法

const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8]


const totalValue = valid1.reduce((acc, num) => {
  let number = num * 2
  if (number > 9) {
    acc += number - 9
  } else {
    acc += number
  }
  return acc
},0)

console.log(totalValue)

【讨论】:

    【解决方案2】:

    在迭代之前将totalValue 的值设置为0 可以通过将totalValue 建立为数字来解决问题。还有其他方法可以做到这一点,但我认为这是合适的。

    const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8]
    //trying to loop through the array and sum all the array values in totalValue variable
    
    const validateCred = (arr) => {
    let totalValue = 0;
       for (let i = arr.length - 1; i >= 0; i--) {
           let number = arr[i] *2;
           if (number > 9) {
               totalValue += number - 9
           } else {
               totalValue += number
           }
       }
       return totalValue
    }
    
    console.log(validateCred(valid1))

    【讨论】:

      【解决方案3】:

      您的 totalValue 未初始化。

      const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8];
      
      const validateCred = (arr) => {
          let totalValue = 0;
          for (let i = arr.length - 1; i >= 0; i--) {
              let number = arr[i] * 2
              if (number > 9) {
                  totalValue += number - 9
              } else {
                  totalValue += number
              }
          }
          return totalValue
      }
      
      console.log(validateCred(valid1))

      【讨论】:

        猜你喜欢
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 2013-03-20
        • 2018-01-05
        • 2017-01-02
        • 2016-02-25
        • 2013-08-23
        • 2015-06-01
        相关资源
        最近更新 更多