【问题标题】:Trying to write a function for interestCalculator but I keep getting errors试图为interestCalculator 编写一个函数,但我不断收到错误
【发布时间】:2020-04-07 15:05:22
【问题描述】:
let data = 
        [
            {
                principal: 2500,
                time: 1.8
            },
            {
                principal: 1000,
                time: 5
            },
            {
                principal: 3000,
                time: 1
            },
            {
                principal: 2000,
                time: 3
            }
        ]
    console.log(data)

    function interestCalculator() {
        for (let i of data)

        if (data[i].principal>=2500 && data[i].time>1 && data[i].time<3){

        return "rate = 3"
        } else if (data[i].principal>=2500 && data[i].time>=3){

        return "rate = 4"
        } else if (data[i].principal<2500 && data[i].time<=1 ){

        return "rate = 2"
        } else {

        return "rate = 1"
        }

    }

我正在尝试编写一个名为“interestCalculator”的函数,该函数将数组作为单个参数并执行以下操作:

使用条件确定适用的费率:

  • 如果本金大于等于2500且时间大于1小于3,则rate = 3

  • 如果本金大于等于2500且时间大于等于3,则rate = 4

  • 如果本金小于2500或者时间小于等于1,那么rate = 2

  • 否则,速率 = 1;

但是我不断收到错误,说主体未定义

【问题讨论】:

  • 如果您使用 for..of 语法,则只需 i.principal。我想知道为什么拼写错误的问题甚至能从高代表用户那里得到答案
  • 您是否缺少for (let i of data) {} 周围的大括号,或者您只是没有正确过去
  • 请尽快开始使用debugger关键字。
  • 尝试使用正确的缩进/格式,因为这样更容易发现错误

标签: javascript


【解决方案1】:

请更新循环语句。使用in 而不是of

for (let i in data)

【讨论】:

  • 不正确,用于迭代对象的属性
  • 是的,我的立场是正确的。但数组索引在技术上也是对象属性。 Array 是 Object 的子对象,
【解决方案2】:

你应该写成 i.principial 而不是 data[i].principial。 这里i 不是索引。 它只是数组中的一个元素。

【讨论】:

    【解决方案3】:

    你的 for 循环周围没有大括号,“for of”返回对象(参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of

    function interestCalculator() {
        for (let obj of data) {   
            if (obj.principal>=2500 && obj.time>1 && obj.time<3){
               return "rate = 3"
            } 
            else if (obj.principal>=2500 && obj.time>=3){    
               return "rate = 4"
            } 
            else if (obj.principal<2500 && obj.time<=1 ){    
                return "rate = 2"
            } 
    
            return "rate = 1"            
        }
    }
    

    【讨论】:

    • @RandWuch 在你的代码中还注意到你代码中的最后一个 else 是多余的,因为你无论如何都要返回,所以我已经删除了
    【解决方案4】:

    当你遍历数组时

    for (let i of data) { ... }
    

    i已经是对象,所以需要使用i.principali.time


    如果您想使用 data[i] 访问 ith 元素,那么您需要使用

    循环数组
     for (let i = 0, j = data.length; i++; i < j) { ... }
    

    最后,值得指出的是,循环中有一些 return 语句,因此该函数将只检查数组中的第一个对象并很快返回,无论有多少元素可能有 @987654329 @。

    【讨论】:

      猜你喜欢
      • 2020-09-24
      • 2013-05-09
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      • 2021-11-21
      • 1970-01-01
      • 2022-08-12
      相关资源
      最近更新 更多