2017-02-17 2 views
1

Используя оператор спреда, я могу получить максимальное значение двух массивов, используя Math.max (... firstArr, ... secondArr), и получить правильное значение, я пытаюсь не добавлять оператора распространения MANUALLY, я пытаюсь добавить автоматически, создав функцию, я пытаюсь добавить или передать оператор спреда перед аргументом. ПримерКак передать оператор с расширенным параметром функции

var firstArr = [1,2,3,4,5]; 
var secondArr = [6,7,8,9]; 

function myFun() { 
    for(var i = 0; i <= arguments.length; i++) { 
     var resl = Math.max(...arguments[i]); 
     document.write("The maximum value is " + resl); 
    } 
} 

myFun(firstArr, secondArr); 

Он отображает два значения результата:

Первый результат будет: «Максимальное значение »

Второй результат будет: «Максимальное значение равно "

Это не сравнение двух массивов за раз, пожалуйста, помогите мне. Благодарю.

+1

Я не понимаю, что вы имеете в виду под " * Я пытаюсь добавить автоматически, создав функцию, я пытаюсь добавить или передать оператор спреда перед аргументом. * «Обратите внимание, что распространение является синтаксисом, а не оператором, и вы не можете« добавить »его произвольно. – Bergi

+2

Что вы подразумеваете под «* Это не сравнение двух массивов за раз *»? Каков ожидаемый результат, который вы хотели бы получить от звонка? – Bergi

+1

Это 'i Bergi

ответ

1

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

Если это так, вы можете сказать [].concat(...arguments), чтобы создать один новый массив со всеми значениями из отдельных массивов, которые были аргументами, а затем использовать оператор спреда для передачи этого нового массива в Math.max(). (Вам не нужно петлю.)

var firstArr = [1,2,3,4,5]; 
 
var secondArr = [6,7,8,9]; 
 

 
function myFun() { 
 
    var resl = Math.max(...[].concat(...arguments)); 
 
    console.log("The maximum value is " + resl); 
 
} 
 

 
myFun(firstArr, secondArr);

+0

Спасибо, что решает мою проблему .. :) – Rasool

3

Похоже, что вы пытаетесь сделать, это

function myFun(...arrays) { 
    const allValues = [].concat(...arrays); 
    return Math.max(...allValues); 
} 
console.log("The maximum value is " + myFun([1,2,3,4,5], [6,7,8,9])); 

Однако я бы рекомендовал, чтобы избежать распространения синтаксиса с потенциально большие данные, и перейти на

function myFun(...arrays) { 
    return Math.max(...arrays.map(arr => Math.max(...arr))); 
} 

или еще лучше

function myFun(...arrays) { 
    return arrays.map(arr => arr.reduce(Math.max)).reduce(Math.max); 
} 
+0

Какая из ваших карт и уменьшить параметры быстрее? (Мне кажется, что у первого было бы гораздо меньше вызовов 'Math.max()', но я не уверен, если это имеет значение.) – nnnnnn

+0

@nnnnnn Мне было не так много о скорости, как о [все еще работающем с большими массивами] (http://stackoverflow.com/q/42263108/1048572) – Bergi

+0

@Bergi Большое вам спасибо за ваш ответ, это действительно помогает, еще раз спасибо ... :) – Rasool

0

Вы можете использовать элемент покоя при объявлении функции, передать массив массивов каждого предшествует распространение элемента параметров функции и распространенные элементы в функции

function myFun(...arr) { 
    return Math.max.apply(Math, ...arr) 
} 

myFun([...firstArr, ...secondArr /*, ...nArr*/ ]); 
+0

'myFun ([firstArr, secondArr, arrN] .reduce ((a, b) => [... a, ... b]))' – guest271314