@campus1

Почему не коректно работает код?

Привет ребят. Решаю задачки, и вот наткнулся на проблем.
Задача состоит в том, что-бы выбрать с массивов найбольшее число и запушить в новый.
Что-то такого:
largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]])
должно вернуть новый массив с такими значениями - [27,5,39,1001].

Вот мое решение:
function largestOfFour(arr) {
    let result = [];
    for (let i = 0; i < arr.length; i++) {
        let maxElement = arr[i][0];
        for (let j = 0; j < arr[i].length; j++) {
            if (maxElement < arr[i][j]) {
                maxElement = arr[i][j];
                result.push(maxElement);
            }
        }
    }
    return result;
}

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


Но в результате у меня получается такой массив:
[5, 27, 35, 37, 39, 1001]
То есть в массив вошло 3 значение с 3 массива, почему так, где я допустил ошибку??
  • Вопрос задан
  • 208 просмотров
Решения вопроса 5
twobomb
@twobomb
Можно проще
var arr = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]];
 var maxarr = arr.map(function(c){
 return Math.max.apply(null, c);
 });
 alert(maxarr );//[27,5,39,1001]
Ответ написан
HalfBloodPrince
@HalfBloodPrince
Front-End Developer
Вот где. Он у вас на третьем проходе, кладет 32 в maxElement. Идет дальше, смотрит, что 35 > 32 и пушит его в массив опять же. И так далее. В третьем массиве каждое следующее значение больше предыдущего.
И еще есть Math.max, хотя я думаю, Вы просто поразмять мозги решили.
Ответ написан
PretorDH
@PretorDH
HTML5, CSS3, PHP, JS - люблю в чистом виде.
result.push(maxElement); нужно поставить после внутреннего цикла.

У вас каждый раз когда срабатывает условие (maxElement < arr[i][j]) в результат вносится maxElement. Должно быть так:

function largestOfFour(arr) {
    let result = [];
    for (let i = 0; i < arr.length; i++) {
        let maxElement = arr[i][0];
        for (let j = 0; j < arr[i].length; j++) {
            if (maxElement < arr[i][j]) {
                maxElement = arr[i][j];
            }
        }
        result.push(maxElement);
    }
    return result;
}
Ответ написан
Комментировать
Griboks
@Griboks
result.push(maxElement); надо убрать из второго цикла
Ответ написан
Комментировать
@Fetur
В карман за ответом не полезу
Вы пушите первое правильное условие, это неправильно. Нужно обойти весь массив, а уж потом пушить результат.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы