2016-07-08 3 views
0

私は、関数に渡される最長配列と等しい長さの新しい配列を作成しようとしています。無限の配列が関数に渡される可能性があります。そのため、Math.maxを使用しようとしています。Math.maxを使用して、関数に渡される配列の長さが最も長い配列を作成しますか?

私は...ループを使用すること、これをワークアップ:

function sumInternalValues() { 
 
    let arrays = Array.from(arguments); 
 
    let longest = 0; 
 

 
    arrays.forEach(arr => { 
 
    longest = (arr.length > longest) ? arr.length : longest; 
 
    }) 
 

 
    let newArr = new Array(longest); 
 
    //... do other things but for sake of this question, return here now 
 
    return newArr.length; 
 
} 
 

 
let arr1 = [1, 2, 3, 4]; 
 
let arr2 = [5, 6, 7, 8, 9, 10]; 
 

 
console.log(sumInternalValues(arr1, arr2));

しかしどのように私はMath.maxではなく、これでを動作するように入手できますか?

function sumInternalValues() { 
    let newArr = new Array(Math.max.apply(Math, arguments.length?)); 
} 

注:私はguidelines hereに基づいて自分の質問に答えることになります。私はこれを取得しようとかなりの時間を費やして、それほど多くのサポートを見つけられませんでした。

答えて

1

array.from()を使用して引数を配列として取得し、結果の配列をマッピングして長さを取得することで、これを行うことができます。そしてapplyMath.max関数にその配列:

function sumInternalValues() { 
 
    let args = Array.from(arguments); 
 
    let newArr = new Array(Math.max.apply(Math, args.map(a => a.length))); 
 
    // ... do some other things, but for the sake of this question, return here 
 
    return newArr.length 
 
} 
 

 
let arr1 = [1, 2, 3, 4]; 
 
let arr2 = [5, 6, 7, 8, 9, 10]; 
 

 
console.log(sumInternalValues(arr1, arr2));

0

高密度アレイ:

let denseArr = Object.assign([], arr1, arr2).fill(undefined); 

スパース配列:

let sparseArr = []; 
sparseArr.length = Math.max(...[arr1, arr2].map(arr => arr.length)); 
関連する問題