为什么toString.split(“”)给我一个变量,它包含3个迷你数组,每个数组的长度属性为1?

问题描述 投票:-3回答:2

我正在尝试将所有birthYear值存储在一个数组中,以便我可以将它们相加并计算平均值。我很难从嵌套数组访问项目和操作数据,并且已经在这几天工作了。我认为今天事情进展顺利,直到我在调用toString()后才意识到这一点.split(“”);我的变量变量现在包含所有3个birthYears,并且可以以数组的格式控制它们,但是将它们存储在一个单独的数组中,并为每个数组生成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
2个回答
0
投票

这一行:

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));

0
投票

您可以简单地使用Array map()函数将birthYears转换为单个数组。然后使用reduce()函数计算总数。

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

const result = myArray.map(el => el.birthYear);

console.log(result); //[1997, 2000, 1989]

const total = result.reduce((acc, val) => acc + val);

const avg  = Math.ceil(total/result.length); 

console.log(avg);//1996
© www.soinside.com 2019 - 2024. All rights reserved.