2017-12-31 25 views
0

sort()メソッドを使用して、すべての配列の中で最大の数値を1つの配列に戻そうとしています。 sort()を使用して配列内の最大の数値を正しく返す

function largestOfFour(arr) { 
    let result=[]; 
    for(let i=0; i < arr.length; i++) { 
     for(let j=0; j < arr[i].length; j++) { 
      let segregatedArr = arr[0][j].sort((a,b)=>b-a); 
     } 
     result = segregatedArr[0][i][0]; 
    } 
    return result; 
} 

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]); 
をそして、私はエラーを取得しています:

TypeError: arr[0][j].sort is not a function 

私は配列にスライス法やマッピングをしようとしていた。

result = $.map(arr, function(value, index) { return [value]; }); 
result.sort().reverse(); 
私は、ソートを除き正しく全体のコードをしたと思います

しかし、どちらの場合でもエラーは同じでした。あなたが最も多く取得するMath.max.applyを使用することができます

+0

共有あなたが関数に渡している 'arr'アレイの構造を使用する場合あなたの質問への複雑さ:人々は**あなたが何か助けを提供する前にやろうとしていることを想像しなければなりません。 –

答えて

0
function maxArr(arr2D) { 
    let result = []; 
    for(let i = 0; i < arr2D.length; i++) { 
     result[i] = arr2D[i].sort((a, b) => b - a)[0]; 
    } 
    return result; 
} 
0

:だから

function largestOfFour(array){ 
    var result = []; 
    for(var i=0; i<array.length;++i){ 
     result.push(Math.max.apply(Math, array[i])); 
    } 
    return result; 
} 
0

をご入力のサンプルを提供する場合、私はこのようなポストのためだと思う、それが参考になりますと希望の出力。

入力として配列の配列を取得しようとしていますか?そして、各要素が元の配列の最大要素を持つ単一の配列を出力しますか?次のように私が作成したサンプル入力されました:

var a1 = [1, 2, 3]; 
var a2 = [5, 19, 7]; 
var a3 = [199, 198, 104]; 
var arrs = [a1, a2, a3]; 
// run the function and view its output: 
console.log(largestOfFour(arrs)); 
// outputs [ 3, 19, 199 ] 

それはあなたがのために行くし、何であれば、私はあなたがあまりにも多くのループ(不要な内部ループと外側のループ)、コードのようにラインを持っていると思います:

let segregatedArr = arr[0][j].sort((a,b)=>b-a); 

は、数字の配列ではなく数字にアクセスしています。

function largestOfFour(arr) { 
    let result=[]; 
    for(let i=0;i<arr.length;i++){ 
     let segregatedArr=arr[i].sort((a,b)=> b-a); 
     result.push(segregatedArr[0]) 
    } 
    return result; 
} 

だから、私は(「J」インデックスを有する)内部ループを除去し、その後、メインループだけ入力配列のi番目の配列をソート次のように私は、機能を変更しました。それはあなたが行ったことですか?

+1

ああ、それは永遠に私を連れて行きました。それらもよく見える。 – Joseph

+0

はい、質問を修正しました。説明してくれてありがとう。一度ループするだけで、segregatedArr [0] – stepniaczio

0
var array = [ 
    [1, 2, 3, 4], 
    [10, 5, 3, 4], 
    [11, 20, 13, 14], 
    [1, 2, 3, 40] 
]; 

function maxVal(arr) { 
    var max = arr[0]; 
    arr.forEach(function(item) { 
    max = Math.max(item, max); 
    }); 
    return max; 
}; 

function largestOfFour(arr) { 
    return arr.map(function(innerArray) { 
    return maxVal(innerArray); 
    }); 
} 

console.log(largestOfFour(array)); 

またはあなたが本当にそうでなければ、のレイヤーを追加します、ソート:-)

function maxVal(arr) { 
    arr.sort(function(a, b) { 
    if (a === b) { 
     return 0; 
    } 
    return a > b ? -1 : 1; 
    }); 
    return arr[0]; 
}; 

function largestOfFour(arr) { 
    return arr.map(function(innerArray) { 
    return maxVal(innerArray); 
    }); 
} 

console.log(largestOfFour(array)); 
関連する問題