我正在尝试将所有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
};
这一行:
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));
您可以简单地使用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