Как найти максимальное значение для любого количества массивов? - PullRequest
1 голос
/ 20 января 2020

Мне нужно найти максимальные значения для любого числа массивов внутри функции. Например, пользователь может добавить 1 массив или 10 массивов. Выходные данные должны отображать максимальные значения для каждого из массивов.

В настоящее время мой код работает, только если предоставлен 1 массив. Пожалуйста, дайте мне знать, что не так.

function getMaxs(args){
array = args;
var max = array[0];

for(i = 0; i < array.length; i++){
    if(max < array[i]){
        max = array[i];
    }
}
console.log(max);
return max;

}

getMaxs([5, 6, 7], [18, 19, 20], [5, 7, 3, 10]); // output is 7
getMaxs([5, 6, 7]); // output is 7
getMaxs([18, 19, 20], [5, 10, 74, 394]); // output is 20

Ответы [ 6 ]

2 голосов
/ 20 января 2020

Если вам нужен максимум для каждого предоставленного массива:

const getMaxs = (...args) => args.map(arr => Math.max(...arr));

console.log( getMaxs([5, 6, 7], [18, 19, 20], [5, 7, 3, 10]) ); // [7, 20, 10]
console.log( getMaxs([5, 6, 7]) );                              // [7]
console.log( getMaxs([18, 19, 20], [5, 10, 74, 394]) );         // [20, 394]
1 голос
/ 20 января 2020

Я полагаю, вы ищете остальные параметры .

Что-то в этом духе:

function getMaxs(...arrays) {
    return Math.max(...arrays.flat());
}

// usage
getMaxs([5, 6, 7], [18, 19, 20], [5, 7, 3, 10]); // output is 20
getMaxs([5, 6, 7]); // output is 7
getMaxs([18, 19, 20], [5, 10, 74, 394]); // output is 394

Связано: Объект аргументов в случае, если вы не можете использовать остальные параметры. В этом случае вы, вероятно, также не поддерживает flat, и в этом случае я рекомендую вам где-нибудь поискать полифилл.

1 голос
/ 20 января 2020

Если вам все равно, от какого подмассива получен результат, вы можете использовать Array.prototype.flat:

function getMaxs(array) {
    const flatArray = array.flat();
    return Math.max(...flatArray);
}

const arr = [[5, 6, 7], [18, 19, 20], [5, 7, 3, 10]];
const max = getMaxs(arr);

console.log(max);
0 голосов
/ 20 января 2020

function getMaxs(...args) {
  array = args.flat();
  var max = array[0];

  for (i = 0; i < array.length; i++) {
    if (max < array[i]) {
      max = array[i];
    }
  }
  // console.log(max);
  return max;
}

console.log(getMaxs([5, 6, 7], [18, 19, 20], [5, 7, 3, 10]));
console.log(getMaxs([5, 6, 7]));
console.log(getMaxs([18, 19, 20], [5, 10, 74, 394]));

вышеупомянутый будет решением для вашего вопроса. Вы можете проверить приведенные ниже снимки экрана для справки.

Для этого ввода я добавил снимки экрана для справки, как он будет обрабатывать код getMaxs ([5, 6, 7], [18, 19, 20] , [5, 7, 3, 10])

теперь потребуется целое

[! [Введите описание изображения здесь] [1]] [1]

enter image description here

0 голосов
/ 20 января 2020

Решение с Ираклисом в порядке, но оно предполагает, что вы даете массив массивов. Однако, если вы хотите передать массивы как разделенные аргументы, вы можете использовать параметры Spread и Rest rest :

function getMaxs(...arrays) {
  const max = Math.max(...arrays.flat())
  console.log(max) // DEBUG
  return max
}
getMaxs([5, 6, 7], [18, 19, 20], [5, 7, 3, 10])
getMaxs([5, 6, 7])
getMaxs([18, 19, 20], [5, 10, 74, 394])

Конечно, вы должны быть осторожны с совместимостью браузера:

enter image description here

0 голосов
/ 20 января 2020

Вы можете использовать функцию .flat (), чтобы массивы сливались и становились единым целым, например:

function getMaxs(args){
  array = args.flat();
  //it will now see it as one big array
  ....
}

Но функция .flat () может не работать в старых браузерах, поэтому Вы также можете сделать это:

array = args.reduce((acc, val) => acc.concat(val), [])

Эффект будет таким же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...