You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中遍历数组时循环调用自定义函数是否可行?

需求可行性说明

这个需求完全可以实现,基于数组遍历批量执行逻辑是JavaScript的常规操作,不需要重复声明函数或者逐个手动调用。

现有代码存在的问题
  • 遍历语法使用错误:for...of遍历数组时,循环变量拿到的直接是数组元素值,不是索引。原代码中for (let i of students)里的i实际是'John'、'Mark'这类字符串,再写students[i]相当于取students['John'],返回值必然是undefined。
  • 标识符拼写错误:JavaScript对大小写敏感,定义的计算输出函数叫yourBodyMass(B和M都是大写),循环内调用写成了yourBodymass(m小写),运行时会直接抛出函数未定义的引用错误。
  • 传参缺失:yourBodyMass定义时要求传入4个参数(姓名、BMI计算函数、体重、身高),原调用只传了2个,缺少对应学生的体重、身高值,最终计算BMI时会得到NaN。
  • 循环提前终止:for循环第一次迭代就执行了return语句,loopData函数会直接退出,永远不会处理第二个学生的数据。
  • 数据匹配逻辑缺失:students、weight、height三个平行数组是靠数组索引一一对应的,原逻辑没有按索引关联同一个学生的姓名、体重、身高,数据无法对应。
修正后代码

你可以直接用索引遍历的写法,逻辑最直观:

const students = ['John', 'Mark'];
const weight = [92, 85];
const height = [1.88, 1.76];

function yourBodyMass(name, calcFunct, mass, height) {
  // 加toFixed(2)保留两位小数,输出更友好
  console.log(`${name} your BMI is ${calcFunct(mass, height).toFixed(2)}.`);
}

function bodyMass(mass, height) {
  return mass / height ** 2;
}

function loopData() {
  // 按索引遍历,匹配三个数组同位置的数据
  for (let i = 0; i < students.length; i++) {
    yourBodyMass(students[i], bodyMass, weight[i], height[i]);
    // 注意不要在循环内写return,否则会直接终止函数
  }
}

// 调用一次即可批量输出所有学生的BMI
loopData();

如果你更习惯用for...of写法,可以配合entries()同时拿到索引和元素:

function loopData() {
  for (const [i, name] of students.entries()) {
    yourBodyMass(name, bodyMass, weight[i], height[i]);
  }
}

运行后控制台输出结果为:

John your BMI is 26.03.
Mark your BMI is 27.44.

内容的提问来源于stack exchange,提问作者HARSHU532

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 12:18:18