【问题标题】:JavaScript Create an array from a for loopJavaScript 从 for 循环创建数组
【发布时间】:2021-09-11 02:11:07
【问题描述】:

我想使用一个函数计算某些人的年龄(出生年份存储在一个数组中),然后使用 for 循环中的年龄创建另一个数组,但我一直得到一个空数组。有人可以帮忙吗?

 const years = [1991, 1994, 2008, 2020];
 const calcAge = function (birthYear) {
  return 2021 - birthYear;
};
 const age = [];
 for (let i = 0; i > years.length; i++) {
  calcAge(i);
  age.push(i);
}
 console.log(age);

【问题讨论】:

  • i > years.length 将永远是false
  • i 从 0 开始,条件是应该大于 4(arr 长度)。这绝不是真的,因此是空数组。
  • 您可能还想更改循环中的代码,但是一旦您修复了 for 循环条件,执行 console.log() 就会让您知道问题所在。
  • 这个主要问题是复杂性,保持简单...使用years.map(birthYear => 2021 - birthYear)

标签: javascript arrays function for-loop


【解决方案1】:

您只是使用> 而不是<

const years = [1991, 1994, 2008, 2020];

const calcAge = function (birthYear) {
  return 2021 - birthYear;
};

const age = [];
for (let i = 0; i < years.length; i++) {
  age.push(calcAge(years[i]));
}
console.log(age);

循环应该运行直到i 等于years.length。如果i0 开始,则比较i &gt; years.length 将是false(从0 &gt; 4 === false 开始),循环将立即终止。

我又为你做了一项改进;我换了:

calcAge(i);
age.push(i);

到:

age.push(calcAge(years[i]));

前者有很多问题;你传递i,索引,而不是years[i],实际年龄。您执行calcAge 计算,但从未实际存储答案。后者解决了这些问题。

按照 Nur 的建议,您可以使用 map 简化代码:

const years = [ 1991, 1994, 2008, 2020 ];
const ages = years.map(year => 2021 - year);
console.log(ages);

【讨论】:

  • 使用for..of循环
  • for..ofArray.prototype.map 将是更清洁的解决方案,但我想解决 OP 提出的实际问题。
【解决方案2】:

您的 for 循环条件不正确。它应该从 i > years.length 切换到 i

const years = [1991, 1994, 2008, 2020];
 const calcAge = function (birthYear) {
  return 2021 - birthYear;
};
 const ages = [];
 for (let i = 0; i < years.length; i++) {
  const age = calcAge(years[i]);
  ages.push(age);
}
 console.log(ages);

【讨论】:

    猜你喜欢
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2019-08-28
    • 2017-06-16
    • 1970-01-01
    • 2017-08-09
    相关资源
    最近更新 更多