2017-12-31 17 views
0

Ich versuche, die größte Zahl in jedem Array auf ein Array mit sort() -Methode zurückzugeben. Ich glaube, ich habe den ganzen Code korrekt außer Sortierung:Verwenden von sort(), um die größten Zahlen in Arrays ordnungsgemäß zurückzugeben

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]]); 

Und ich erhalte eine Fehlermeldung:

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

Ich habe versucht, die Scheibe Methode oder Zuordnung zu einem Array mit:

result = $.map(arr, function(value, index) { return [value]; }); 
result.sort().reverse(); 

Aber der Fehler war immer noch der gleiche in beiden Fällen.

+0

Teile der Struktur des 'arr' Array zu verwenden, sind Sie an die Funktion übergeben, sonst fügen Sie eine Schicht aus Komplexität Ihrer Frage: Menschen müssen ** annehmen **, was Sie vor der Bereitstellung von Hilfe tun möchten. –

Antwort

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

Sie können Math.max.apply verwenden, um die größte Zahl zu erhalten:

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

Also, ich, wie dies für einen Beitrag zu denken, wäre es hilfreich, wenn Sie eine Probe des Eingangs liefern und die gewünschte Ausgabe.

Möchten Sie ein Array von Arrays als Eingabe verwenden? Und dann ein einzelnes Array ausgeben, wobei jedes Element das größte Element der ursprünglichen Arrays hat? Der Probeneingang I erstellt war wie folgt:

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 ] 

Wenn das ist, was Sie für würden, dann denke ich, Sie haben zu viele Schleifen (eine äußeree Schleife mit einer nicht benötigten inneren Schleife), so dass die Codezeile:

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

greift auf eine Nummer statt auf ein Zahlenfeld zu. I modifiziert, um die Funktion wie folgt:

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; 
} 

So, I die innere Schleife entfernt (mit dem ‚J‘ index), und dann wird die Hauptschleife sortiert nur die i-te Anordnung der Eingabeanordnungen. Wollten Sie das?

+1

Oh, das hat mich für immer genommen, und ich habe diese anderen Beiträge nicht bemerkt. Die sehen auch gut aus. – Joseph

+0

Ja, ich habe meine Frage korrigiert. Danke für die Erklärung. Es macht viel mehr Sinn, einmal zu loopen und nur mit segregatedArr [0] zu pushen – 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)); 

oder wenn Sie wirklich wirklich wollen, sortieren :-)

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)); 
Verwandte Themen