【问题标题】:Javascript - Interest calculator keeps returning undefined as outputJavascript - 利息计算器不断返回未定义的输出
【发布时间】:2026-02-19 19:35:01
【问题描述】:

我是一个新手 JS 开发人员,一段时间以来一直在为某个特定问题苦苦挣扎,这有点难以解释(从标题中可以看出),所以如果有帮助,我会连同我的答案一起展示这个问题.

首先使用以下值创建一个名为 data 的对象数组:

  1. Principal- 2500, time- 1.8, 2.Principal- 1000, time- 5,
  2. 本金- 3000,时间- 1,
  3. Principal- 2000, time- 3

  4. 编写一个名为“interestCalculator”的函数,它将数组作为单个参数并执行以下操作:

    • 如果本金大于等于2500且时间大于1小于3,则rate = 3
    • 如果本金大于等于2500且时间大于等于3,则rate = 4
    • 如果本金小于2500或者时间小于等于1,那么rate = 2
    • 否则,速率 = 1; 使用以下公式计算每个对象的利息:(本金 * 利率 * 时间)/100。

该函数应返回一个名为“interestData”的对象数组,每个单独的对象都应具有“principal”、“rate”、“time”和“interest”作为键及其对应的值。 在您的 return 语句之前将 'interestData' 数组记录到控制台。 最后,调用/执行函数并传递您创建的“数据”数组。

回答:

 const Data = [
    {
        Principal: 2500,
        Time: 1.8
    },
    {
        Principal: 1000,
        Time: 5
    },
    {
        Principal: 3000,
        Time: 1
    },
    {
        Principal: 2000,
        Time: 3
    }
];

let rate;
 const interestCalculator = (array) =>{
     const interestData = array.map(item =>{
         const {Principal, Time} = item;
         if(Principal>=2500 && Time >= 1 && time < 3){
             rate = 3;
         }
         else if(Principal>=2500 && Time >= 3){
             rate = 4;
         }
         else if(Principal<2500 || Time <= 1){
             rate=2;
         }
         else{
             rate = 1;
         }

         const interest = (Principal * rate * Time)/100;

         item.interest = interest;
         item.rate= rate;
     });
     console.log(interestData);
     return interestCalculator();
 }

以上代码在控制台中返回“未定义”。于是我尝试了另一种方式:

const interestCalculator = (item) =>{
    let rate;
    if(Principal>=2500 && Time >= 1 && time < 3){
        rate = 3;
    }
    else if(Principal>=2500 && Time >= 3){
        rate = 4;
    }
    else if(Principal<2500 || Time <= 1){
        rate = 2;
    }
    else{
        rate = 1;
    }
const interest = (Principal * rate * Time)/100;
const interestData = [item.Principal, item.rate, item.Time, item.interest];
console.log (interestData);
return interestCalculator();

}

仍然未定义...我尝试了我目前知道但无济于事的不同方法(foreach()、arr.push())。我很困惑,任何帮助将不胜感激。对不起,很长的帖子。谢谢。

【问题讨论】:

  • 在你的.map回调中没有return
  • 此外,在外部函数中,您执行 `return interestCalculator();`,它递归调用 interestCalculator,但不提供任何输入。

标签: javascript arrays object


【解决方案1】:

您需要从.map() 内部return item 并使用Data 作为参数调用interestCalculator,如下所示:

const Data = [{
    Principal: 2500,
    Time: 1.8
  },
  {
    Principal: 1000,
    Time: 5
  },
  {
    Principal: 3000,
    Time: 1
  },
  {
    Principal: 2000,
    Time: 3
  }
];

let rate;
const interestCalculator = (array) => {
  const interestData = array.map(item => {
    const {
      Principal,
      Time
    } = item;
    if (Principal >= 2500 && Time >= 1 && Time < 3) {
      rate = 3;
    } else if (Principal >= 2500 && Time >= 3) {
      rate = 4;
    } else if (Principal < 2500 || Time <= 1) {
      rate = 2;
    } else {
      rate = 1;
    }

    const interest = (Principal * rate * Time) / 100;

    item.interest = interest;
    item.rate = rate;
    
    return item;
  });
  
  return interestData;
}

console.log(interestCalculator(Data));

【讨论】:

  • 天啊!!非常感谢!!您的解决方案实际上是我所需要的。它运行完美。仍然围绕着 arr.map() 方法。这对我来说很难掌握。
  • @Wizzle 作为初学者,请先了解基本循环,例如 forwhile,然后再转到高级功能,例如 forEach、map、filter 等。您可以标记单击左侧的灰色勾号接受的答案