Почему toString.split(» «) дал мне переменную, содержащую 3 мини-массива, каждый из которых имеет свойство длины, равное 1?

#javascript

#javascript

Вопрос:

Я пытаюсь сохранить все значения года рождения внутри массива, чтобы я мог их сложить и вычислить среднее значение. Я борюсь с доступом к элементам и манипулированием данными из вложенных массивов и работаю над этим несколько дней. Я думал, что сегодня все идет хорошо, пока не понял, что после вызова toString().split(» «); моя переменная изменения теперь содержит все 3 года рождения и может утешать.запишите их в формате массива, но сохраните каждый из них внутри отдельного массива и получите длину 1 для каждого из них, вместо этого все годы рождения хранятся в 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


};  

Комментарии:

1. Вы подходите неправильно, вам не нужно split , просто перебирайте свой массив, добавляйте годы и делите на length of array

Ответ №1:

Эта строка:

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

Ответ №2:

Вы можете просто использовать map() функцию Array для преобразования birthYears в один массив. Затем используйте reduce() function для вычисления общего числа.

 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
  

Комментарии:

1. Это наполовину верно, op хочет рассчитать средний год, поэтому вам нужно добавить эту часть в свой код