首页 > 解决方案 > 为什么 toString.split(" ") 给了我一个包含 3 个迷你数组的变量,每个数组的长度属性为 1?

问题描述

我正在尝试将所有birthYear 值存储在一个数组中,这样我就可以将它们相加并计算平均值。我很难从嵌套数组中访问项目和操作数据,并且已经为此工作了好几天。我以为今天事情进展顺利,直到我意识到在调用 toString().split(" "); 我的更改变量现在包含所有 3 个birthYears 并且可以以数组的格式 console.log 它们,但将它们分别存储在一个单独的数组中并为它们中的每一个生成长度为 1,而不是将所有的birthYears 存储在 1 个数组中单个长度为 3。这让我感到困惑并且有问题,因为我想将所有出生年份相加并平均它们,但我被卡住了,因为我计划通过将值存储在单个数组中来做到这一点(我以为我可以相当简单地使用 . split(" "),将它们相加,然后将它们除以数组的长度以获得平均值。如果有人能解释为什么 toString().split(" "); 以这种方式运行,或者对我如何修复它并将所有 .birthYears 存储在一个数组中提出建议,如下所示:change = [birthYear1,birthYear2,birthYear3],我将不胜感激。对于任何漫无边际的内容(这是我的第一篇堆栈帖子,我不想遗漏任何重要信息)和冗长的代码,我深表歉意,但我不知道如何缩短它。

我愚蠢地尝试在变量更改上使用 .join() 方法将其全部放入一个字符串中,因为我希望如果我之后再次调用 .split() 它将按照我期望的方式拆分,但我删除了代码因为它没有用。

const myArray = [{
    employee: 'Hanna',
    birthYear: 1997
  },
  {
    employee: 'Zack',
    birthYear: 2000
  },
  {
    employee: 'David',
    birthYear: 1989
  }
];


for (let i = 0; i < myArray.length; i++) {
  var years = (myArray[i].birthYear);



  var change = years.toString().split(" ");
  console.log(change);



  console.log(change.length) // I'd expected variable change to store all of the birthYear values inside a single array so but it didn't and I'm unsure of how to fix this


};

标签: javascript

解决方案


这一行:

for(let i  = 0;i < myArray.length;i++){
    var years = (myArray[i].birthYear);

您正在覆盖该变量,并且该years变量在循环结束时保存最后一个出生年份。

它应该是:

var years = [];
for(let i  = 0;i < myArray.length;i++){
    years.push(myArray[i].birthYear);

并且不需要进一步的代码,现在years变量包含所有出生年份。

const myArray = [{
    employee: 'Hanna',
    birthYear: 1997
  },
  {
    employee: 'Zack',
    birthYear: 2000
  },
  {
    employee: 'David',
    birthYear: 1989
  }
];

var years = [], totals = 0;
for(let i  = 0;i < myArray.length; i++){
    years.push(myArray[i].birthYear);
    totals += myArray[i].birthYear;
}
    
console.log(years);

var average = totals / myArray.length;

console.log("average", Math.ceil(average));


推荐阅读