Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
zlobobr
4 / 4 / 4
Регистрация: 14.03.2016
Сообщений: 38
#1

Найти максимальное значение в массиве любой вложенности

04.07.2016, 19:24. Просмотров 1026. Ответов 15
Метки нет (Все метки)

есть массив var arr2 = [1,2,3,[4,5,[6,7],[1,3],0,1,2],3];
есть три решения данной задачи


Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var arr2 = [1,2,3,[4,5,[6,7],[1,3],0,1,2],3];
var arr = [1,2,3,[4,5,[6,7],[8,9],0,1,2],3];
 var arr1=[];
 function maxValueArr(arr) {
    for(var i=0;i<arr.length;i++) {
    if(!Array.isArray(arr[i])) {
     arr1.push(arr[i]);
       } else {
        maxValueArr(arr[i]);
       }
  }
  return Math.max.apply(null,arr1);
}
 
 
alert( maxValueArr(arr));
arr1.length=0;
alert( maxValueArr(arr2));

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var arr1 = [1,2,3,[4,5,[6,7],[1,3],0,1,2],3];
var arr = [1,2,3,[4,5,[6,7],[8,9],0,1,2],3];
 
 function maxValueArr() {
    var result=-Infinity;
   return function z(arr) {
  for(var i=0;i<arr.length;i++) {
    if(!Array.isArray(arr[i])) {
    if(arr[i]>result) result=arr[i];
       } else {
        z(arr[i]);
       }
  }
  return result;
}
}
var maxValueArr=maxValueArr();
var max = maxValueArr(arr);
var max1=maxValueArr(arr1);
alert(max);
alert(max1);
console.log(max);
console.log(max1);

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var arr = [1,2,3,[4,5,[6,7],[8,9],0,1,2],3];
var arr1 = [1,2,3,[4,5,[6,7],[1,3],0,1,2],3];
 
 function maxValueArr(arr) {
    var result=-Infinity;
 function z(arr) {
  for(var i=0;i<arr.length;i++) {
    if(!Array.isArray(arr[i])) {
    if(arr[i]>result) result=arr[i];
       } else {
        z(arr[i]);
       }
  }
}
z(arr);
return result;
}
 
alert(maxValueArr(arr));
alert(maxValueArr(arr1));

может есть предложения сделать это более оптимально?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2016, 19:24
Ответы с готовыми решениями:

Создать программу, которая с помощью цикла выводила на экран все поля объектов на экран, любой глубины вложенности
3) Цикл for..in + вложенные объекты (рекурсия) Создать программу, которая с...

Максимальное значение input
Здравствуйте, вводя в таблицу данные, внизу считает &quot;Итого:&quot;, мне надо чтобы...

Найти максимальное значение из двух полей ввода
Здравствуйте, подскажите, в чем может быть ошибка? Я нажимаю на &quot;Определить, а...

Вывести минимальное, максимальное и среднее значение
Здравствуйте знатоки JavaScript! Помогите новичку. Не могу вывести среднее...

Получить максимальное значение из трёх чисел, используя +, *, ()
Если три целых числа a, b, c, возвращают число, полученное после вставки...

15
BANO
Ренегат
Эксперт HTML/CSS
1716 / 1059 / 385
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
04.07.2016, 19:28 #2
zlobobr, может сначала задачу огласите?
0
zlobobr
4 / 4 / 4
Регистрация: 14.03.2016
Сообщений: 38
04.07.2016, 19:34  [ТС] #3
оно в названии темы)
0
BANO
Ренегат
Эксперт HTML/CSS
1716 / 1059 / 385
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
04.07.2016, 19:39 #4
есть оптимальное)
Javascript
1
Math.max.apply(0,_.flatten(arr))
это с использованием библиотеки underscore.js

вот есть другая идея
Javascript
1
2
3
4
5
6
7
8
var arr = [1,2,3,[4,5,[6,7],[8,9],0,1,2],3];
function max(arr){
    return arr.reduce(function(old, val){
        var val = Array.isArray(val) ? max(val) : val;
        return old > val ? old : val;
    }, -1/0)
}
alert(max(arr))
Добавлено через 4 минуты
zlobobr, проблема в том, что это не многомерный массив, а просто массив разной вложенности
вот это двухмерный массив [[1, 3], [2, 4]]
это 3-х мерный массив [[[1, 4],[2, 4]], [[6, 3], [7, 3]]]
1
kalabuni
Нарушитель
3222 / 2547 / 612
Регистрация: 18.04.2012
Сообщений: 7,684
04.07.2016, 20:57 #5
используйте примитив массива
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function findMaxElem (arr)
 
    {
    var arr0 = new String (arr).split (',');
    var j = arr0.length;
    var maxElem = -Infinity;
    while (j--)
        {
        if (arr0 [j] > maxElem) maxElem = arr0 [j];
        }
    return maxElem;
    }
 
 
var myarr = [1,2,3,[4,[5,[6,7],[8,9],0,1,2]],3];
 
alert (findMaxElem (myarr));
1
zlobobr
4 / 4 / 4
Регистрация: 14.03.2016
Сообщений: 38
04.07.2016, 21:48  [ТС] #6
спс за подсказку..

по собранным по крупицам думаю вот так будет самое оно



Javascript
1
2
3
4
5
6
7
function findMaxElem (arr) {
  var arr0 = new String (arr).split (',');
    return  Math.max.apply(null,arr0);;
    }
 var myarr = [1,2,3,[4,[5,[6,7],[8,9],0,1,2]],3];
 
alert (findMaxElem (myarr));
0
BANO
Ренегат
Эксперт HTML/CSS
1716 / 1059 / 385
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
04.07.2016, 22:08 #7
zlobobr, фу, читерство, которое работает только для чисел)
главное, что работает)
0
zlobobr
4 / 4 / 4
Регистрация: 14.03.2016
Сообщений: 38
04.07.2016, 22:14  [ТС] #8
ну может немногои читерство и танцы с бубном )), но под поставленную задачу подходит)
0
kalabuni
Нарушитель
3222 / 2547 / 612
Регистрация: 18.04.2012
Сообщений: 7,684
04.07.2016, 22:28 #9
Цитата Сообщение от BANO Посмотреть сообщение
фу, читерство, которое работает только для чисел
подскажите, пожалуйста, а где ещё, кроме как среди чисел, можно искать "максимальное значение"?

и потом, почему "читерство"
метод valueOf (), возвращающий примитив объекта, и неявно здесь используемый -- он стандартизирован и описан в ECMA
0
BANO
Ренегат
Эксперт HTML/CSS
1716 / 1059 / 385
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
04.07.2016, 22:40 #10

Не по теме:

ой, начинается



kalabuni, можно так же искать максимальную строку) и метод, который дал тс, для такого задания уже не подойдёт
наши методы универсальны для сравнения любых сравниваемых в js объектов
будь то числа, строки, или солянка из строк, чисел и undefined

читерство потому, что массивы при превращении в строку не дают в конце квадратных скобок, и получается, что деля по запятым, мы получим одномерный массив
эта особенность в данном случае использована очень даже лихо

Добавлено через 1 минуту
kalabuni, стоп, где это тут valueOf неявно используется?

Добавлено через 1 минуту
тут скорее использован toString
и, если мне не изменяет память, массивы - единственные стандартные объекты, которые возвращают результат выполнения метода toString своих "чилдов", соединяя эти результаты запятой
0
kalabuni
Нарушитель
3222 / 2547 / 612
Регистрация: 18.04.2012
Сообщений: 7,684
04.07.2016, 22:59 #11
Цитата Сообщение от BANO Посмотреть сообщение
где это тут valueOf неявно используется?
вот здесь -- new String (arr) следовало записать как new String (arr.valueOf ())
либо как arr.valueOf () + ''
0
BANO
Ренегат
Эксперт HTML/CSS
1716 / 1059 / 385
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
04.07.2016, 23:02 #12
kalabuni, ненене
при сравнении со строками, тем более при сложении вызывается метод toString, valueOf при численном сложении

Добавлено через 35 секунд
и кстати, valueOf вернёт тот же массив, думаю лаже ссылку на него
0
Padimanskas
Superposition
934 / 594 / 256
Регистрация: 27.10.2013
Сообщений: 2,064
04.07.2016, 23:35 #13
метод toString наследуется и перегружается в каждом объекте, indexOf есть только у Date если я не ошибаюсь. Автору нужен банальный рекурсивный обход с проверкой типа. примерно так
Javascript
1
2
3
4
5
6
7
8
function recursiveFn(arr) {
 
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] instanceof Array) recursiveFn(arr[i]);
        ...
    }
 
}
0
BANO
Ренегат
Эксперт HTML/CSS
1716 / 1059 / 385
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
04.07.2016, 23:47 #14
Цитата Сообщение от Padimanskas Посмотреть сообщение
indexOf есть только у Date если я не ошибаюсь
ошибаетесь
у Date вообще его нету
он есть у массивов и строк
0
Padimanskas
Superposition
934 / 594 / 256
Регистрация: 27.10.2013
Сообщений: 2,064
04.07.2016, 23:52 #15
хотя насчет индексоф вряд ли. таки ошибаюсь

Добавлено через 3 минуты
Цитата Сообщение от BANO Посмотреть сообщение
ошибаетесь
у Date вообще его нету
он есть у массивов и строк
да, капитан. Перепутал valueOf с indexOf
0
Fedor Vlasenko
Программист Php, Js
Эксперт PHP
815 / 548 / 215
Регистрация: 01.02.2015
Сообщений: 1,685
04.07.2016, 23:58 #16
Цитата Сообщение от BANO Посмотреть сообщение
zlobobr, фу, читерство, которое работает только для чисел)
главное, что работает
наверное в большинстве случаях для чисел это будет самое быстрое и правильное решение
Javascript
1
2
var a = ('' + [1, 2, 3, [4, [5, [6, 7], [8, 9], 0, 1, 2 ]], 3]).split(',');
console.log( Math.max.apply(null, a));
0
04.07.2016, 23:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2016, 23:58

Функция, находящая максимальное значение в массиве различной степени вложенности
Добрый день, ребята ! Подскажите пожалуйста решение, никак не могу сообразить...

Найти максимальное значение в массиве
найти максимальное значение в массиве. Почему ругается?

Найти максимальное значение в массиве
Всем привет. Такой вопрос: как в NSArray можно найти индекс максимального числа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru