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

JS数组输出结果异常,如何修改程序得到预期输出?

问题分析与解决方案

你遇到的问题根源是循环调用数组中的每个函数时,都传递了全部四个参数,但第二个函数只定义了job和city两个形参,它会自动取传入参数的前两个——也就是"Sam"和27,这就导致输出不符合预期。

下面是几种可行的修改方案:

方法一:给每个函数传递对应参数

直接针对每个函数的需求传递匹配的参数,不用强制用循环统一传参:

const arr = [
  (name, age) => {
    console.log(`My name is ${name} and I am ${age} years old.`);
  },
  (job, city) => {
    console.log(`I work as a ${job} in ${city}.`);
  }
];

// 给第一个函数传姓名和年龄,第二个传职业和城市
arr[0]("Sam", 27);
arr[1]("Web Dev", "Ind");

如果一定要用循环,可以把函数和对应参数配对存储:

const funcWithParams = [
  { func: (name, age) => console.log(`My name is ${name} and I am ${age} years old.`), params: ["Sam", 27] },
  { func: (job, city) => console.log(`I work as a ${job} in ${city}.`), params: ["Web Dev", "Ind"] }
];

for (let item of funcWithParams) {
  item.func(...item.params);
}

方法二:用对象传递参数(避免顺序问题)

把所有参数打包成对象,让每个函数只提取自己需要的属性,这种方式不受参数顺序影响:

const arr = [
  ({ name, age }) => {
    console.log(`My name is ${name} and I am ${age} years old.`);
  },
  ({ job, city }) => {
    console.log(`I work as a ${job} in ${city}.`);
  }
];

const userInfo = { name: "Sam", age: 27, job: "Web Dev", city: "Ind" };
for (let i = 0; i < arr.length; i++) {
  arr[i](userInfo);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:25:00