#javascript #arrays #algorithm #max
#javascript #массивы #алгоритм #макс
Вопрос:
function largestOfFour(arr) {
let newArr = [];
let max = 0;
for(let i = 0; i<arr.length;i ){
for(let j = 0; j<arr[i].length; j ){
if(arr[i][j]>max){
max = arr[i][j];
console.log(max);
newArr.push(max);
}
}
}
return newArr;
}
Здравствуйте, я пишу код для поиска максимального значения в массиве вложенных массивов, и мне требуется добавить это максимальное значение в новый массив. Мой код приведен выше. Проблема в том, что мой код помещает каждое значение, превышающее максимальное, в новый массив. Когда я просто хочу получить истинное максимальное значение без использования функции Math.max. Я считаю, что это происходит потому, что у меня нет способа обновить максимальное значение при нахождении нового максимального значения. Некоторые рекомендации были бы очень полезны
Комментарии:
1. у вас есть какие-то данные и желаемый результат?
2. Помещается
newArr.push(max);
после завершения внутреннего цикла for.3.
[[1,2,3],[5,6],[7]].map(a => Math.max(...a))
4. @epascarello, …» без использования Math.max »
5. @NinaScholz следовательно, почему не ответ. Без max
[[1,2,3],[5,6],[7]].map(a => a.reduce((max, n) => max > n ? max : n, a[0]))
Ответ №1:
Инициализируйте max
во внешнем цикле ( i
) с -Infinity
помощью (наименьшего «доступного» числа), затем сравните и обновите его во внутреннем цикле, но нажимайте его только после завершения внутреннего цикла:
function largestOfFour(arr) {
const newArr = [];
for (let i = 0; i < arr.length; i ) {
let max = -Infinity;
for (let j = 0; j < arr[i].length; j ) {
if (arr[i][j] > max) {
max = arr[i][j];
}
}
newArr.push(max);
}
return newArr;
}
const result = largestOfFour([[4, 3, 2, 1], [1, 2, 3, 4], [500, 600, 400], [300, 1000, 700]]);
console.log(result);
Ответ №2:
Вы можете сохранить первое значение в качестве начального значения для max
и выполнить итерацию со второго индекса.
Позже вставьте максимальное значение вложенного массива в результирующий массив.
function largestOfFour(arrays) {
const maxValues = [];
for (let [max, ...array] of arrays) {
for (const value of array) if (max < value) max = value;
maxValues.push(max);
}
return maxValues;
}
console.log(largestOfFour([[3, 2, 1, 7], [2, 6, 4, 9], [2, 2, 1, 1], [4, 3, 6, 7]]));
Комментарии:
1. Неплохо. Вы выполняете деструкцию в for…of (
[first, ...array]
), а затем вы также можете преобразовать внутренний цикл в for…of .2. профессиональный ответ, КАК
Ответ №3:
Из вашего описания проблемы я могу понять, что вы хотите получить максимальное значение из подмассивов массива. В этой ситуации вам не нужно использовать newArr.push(max) внутри блока IF . Вы можете использовать эту строку после завершения двух вложенных циклов. Затем вы используете newArr.push(max); А затем возвращаете newarr.
Комментарии:
1. Объясните больше на примерах. он новый пользователь