В моем массиве есть запятые, что мешает работе array.push ()

Я прохожу через freeCodeCamp, и у меня проблемы с их проблемой «Возвращать наибольшие числа в массивах». Проблема, похоже, связана с моим кодом для поиска каждого четвертого элемента во втором цикле for. Похоже, он включает запятые из массива decArray. Есть идеи, как исправить это или переориентировать мой мыслительный процесс? Я ценю его!

Инструкции:

  • Вернуть массив, состоящий из наибольшего числа из каждого предоставленного подмассива. Для простоты предоставленный массив будет содержать ровно 4 подмассива.
  • Помните, что вы можете перебирать массив с помощью простого цикла for и обращаться к каждому члену с помощью синтаксиса массива arr [i].
  • largeOfFour ([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]) должен возвращать массив.
  • КрупнейшийOfFour ([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]) должен возвращать [27,5 , 39,1001].
  • КрупнейшийOfFour ([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]]) должен возвращать [9, 35 , 97, 1000000].

Вот мой код:

function largestOfFour(arr) {
  var decArray = [];    // initialize variable to sort each subarray in descending order
  var finalArray = [];  // initialize variable for final array
  
  // sort array values in descending numerical order instead of by alphabetical order
  function sortNumber(a,b) {
    return a - b;
  }
  
  // loop through initial array to sort each subarray in descending order
  for (var i = 0; i < arr.length; i++) {
    decArray += arr[i].sort(sortNumber).reverse() + ",";
  }
  
  // loop through decArray to find every fourth element
  for (var j = 0; j < decArray.length; j += 4) {
    finalArray.push(decArray[j]);
  }
  
  // return the final array
  return finalArray;
}

// test array
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

Что должен делать ... + "," в строке 12?

Jordan Running 15.03.2018 21:14
function largestOfFour (arr) { return arr.map(a => Math.max(...a)); }
Patrick Roberts 15.03.2018 21:14

@PatrickRoberts Хорошее решение!

Joe Frambach 15.03.2018 21:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
249
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

decArray - это массив, поэтому вы должны помещать туда элементы, а не добавлять к нему строку.

заменить строку ниже

decArray += arr[i].sort(sortNumber).reverse() + ",";

с этим

decArray.push(...arr[i].sort(sortNumber).reverse());

Сообщите мне, работает ли это для вас.

Собственно, decArray.push(...arr[i].sort(sortNumber).reverse());, иначе decArray не будет плоским. Хорошее объяснение. Это правильный ответ.

Patrick Roberts 15.03.2018 21:17

@null Ваш ответ сработал! Спасибо за помощь; Я даже не подумал о том, что добавляю строку, добавляя эту запятую. Хотя в этом есть смысл. Я ценю его!

Luke Orth 15.03.2018 21:27

@LukeOrth Я рад, что это помогло.

null 15.03.2018 21:29

На самом деле проблема с вашим кодом заключается в том, что когда вы выполняете этот decArray += arr[i].sort(sortNumber).reverse() + ",";, вы конвертируете массив в строку, и в конце decArray станет строкой с информацией 5,4,3,1,...., поэтому, когда вы выполняете decArrayj, он вернет 3, поскольку это пятый элемент в строке, так что вы получаете неправильный ответ. Чтобы решить эту проблему, выполните finalArray.push(arr[i].sort(sortNumber).reverse()[0]) и удалите thrid for loop. или попробуйте ниже код

function largestOfFour(arr){
  var finalArray = [];
	for(i = 0, i2 = arr.length; i<i2; i++) {
      finalArray.push(Math.max.apply(null, arr[i]));
  }
  return finalArray;
}

console.info(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]));

Я не отрицал это, но отмечу, что, хотя это верная информация, она не отвечает на вопрос о первоначальной попытке реализации.

Patrick Roberts 15.03.2018 21:23

Другие вопросы по теме