Я прохожу через freeCodeCamp, и у меня проблемы с их проблемой «Возвращать наибольшие числа в массивах». Проблема, похоже, связана с моим кодом для поиска каждого четвертого элемента во втором цикле for. Похоже, он включает запятые из массива decArray. Есть идеи, как исправить это или переориентировать мой мыслительный процесс? Я ценю его!
Инструкции:
Вот мой код:
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]]);function largestOfFour (arr) { return arr.map(a => Math.max(...a)); }@PatrickRoberts Хорошее решение!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


decArray - это массив, поэтому вы должны помещать туда элементы, а не добавлять к нему строку.
заменить строку ниже
decArray += arr[i].sort(sortNumber).reverse() + ",";
с этим
decArray.push(...arr[i].sort(sortNumber).reverse());
Сообщите мне, работает ли это для вас.
Собственно, decArray.push(...arr[i].sort(sortNumber).reverse());, иначе decArray не будет плоским. Хорошее объяснение. Это правильный ответ.
@null Ваш ответ сработал! Спасибо за помощь; Я даже не подумал о том, что добавляю строку, добавляя эту запятую. Хотя в этом есть смысл. Я ценю его!
@LukeOrth Я рад, что это помогло.
На самом деле проблема с вашим кодом заключается в том, что когда вы выполняете этот 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]]));Я не отрицал это, но отмечу, что, хотя это верная информация, она не отвечает на вопрос о первоначальной попытке реализации.
Что должен делать
... + ","в строке 12?