2016-05-29 6 views
4

Ich versuche, dieses Array zu nehmen und es in 2 neue Arrays, Evens und Odds zu teilen und sie zurückzugeben. Wenn ich den Code unten ausführe, bekomme ich nur die Chancen, warum ist das? Und was kann ich tun, um es zu lösen?Ich kann nur 1 Array zurückgeben

Vielen Dank im Voraus.

var numbersArray = [1,2,34,54,55,34,32,11,19,17,54,66,13]; 

function divider(arr) { 
    var evens = []; 
    var odds = []; 
    for (var i = 0; i < arr.length; i++) { 
    if (arr[i] % 2 === 0) { 
     evens.push(arr[i]); 
    } else { 
     odds.push(arr[i]); 
    } 
    } 
    return(evens, odds); 
} 

divider(numbersArray); 
+3

Verwenden 'return { 'sogar': sogar, 'Chancen': Chancen};' statt. – skypjack

+0

Und Destrukturierung auf der Anruferseite verwenden: lassen Sie {gerade, Quoten} = ZahlenArray (...); – rand

Antwort

11

Da JavaScript nur einen Wert zurückgeben kann. Je.

return(evens, odds) 

wertet auf den gleichen Wert wie

return odds 

aufgrund der in comma operator Gruppierungs Klammer gewickelt.

Vielleicht ein Array von Arrays (oder sogar ein Objekt von Arrays) Rückkehr ist nützlich ..

return [evens, odds] 
+0

Außer Sie verwenden Fortsetzungsart, theoretisch, ich meine, nicht ernst: D – rand

+0

@Iven Auch mit CPS (oder Generatoren am anderen Ende), kann ein Ausdruck immer nur einen Wert ergeben. – user2864740

+0

Nein, weil die Rückgabe in CPS bedeutet, dass eine andere Fortsetzung aufgerufen wird. Dies ist eine Funktion in Javascript und Funktionen akzeptieren mehrere Argumente! – rand

1

Sie nur eine Einheit aus einer Funktion zurückgeben kann. Es ist besser, Ihre Ergebnisse in ein einzelnes Objekt zu verpacken.

var numbersArray = [1,2,34,54,55,34,32,11,19,17,54,66,13]; 

    function divider(arr) { 
     var evens = []; 
     var odds = []; 
     for (var i = 0; i < arr.length; i++) { 
     if (arr[i] % 2 === 0) { 
      evens.push(arr[i]); 
     } else { 
      odds.push(arr[i]); 
     } 
     } 
     return {evens:evens, odds:odds}; 
    } 

    divider(numbersArray); 
2

Das Ergebnis der Auswertung ist (evens, odds)odds, dass somit zurückgeführt wird.
So funktioniert comma operator.

Verwenden Sie die folgende Anweisung statt:

return { 'evens': evens, 'odds': odds }; 

Als Beispiel:

var v = divider(numberArrays); 
v.evens; // get evens this way 
v.odds; // get odds this way 
2

Sie sollten Ihre Ergebnisse als Array zurück.

return [evens, odds]; 

und dann die Ergebnisse zuzugreifen:

var evens; 
var odds; 

var arrayResults = divider(numbersArray); 
evens = arrayResults[0]; 
odds = arrayResults[1]; 
console.log(evens); 
console.log(odds); 
2

In Javascript, Sie nur einen Wert zurückgeben kann. Also, wenn Sie mehrfache Werte zurückkehren wollen, um sich zu trennen, können Sie sie in einem Array setzen oder in einem Objekt:

return([evens, odds]); 

ODER

return({evens: evens, odds: odds}) 
1

ES5 nicht Tupel unterstützen, sollten Sie wickeln Sie Ihre Rückkehr

in einem Objekt wie hier

var numbersArray = [1,2,34,54,55,34,32,11,19,17,54,66,13]; 

    function divider(arr) { 
     var evens = []; 
     var odds = []; 
     for (var i = 0; i < arr.length; i++) { 
     if (arr[i] % 2 === 0) { 
      evens.push(arr[i]); 
     } else { 
      odds.push(arr[i]); 
     } 
     } 
     return {evens:evens, 
    odds:odds}; 
    } 

    divider(numbersArray); 

Oder in einem Array als die anderen aswers s wie

1

Sie könnten ein Objekt zurückgeben, wie folgt aus:

var numbersArray = [1,2,34,54,55,34,32,11,19,17,54,66,13]; 

function divider(arr) { 
    var evens = []; 
    var odds = []; 
    for (var i = 0; i < arr.length; i++) { 
     if (arr[i] % 2 === 0) { 
      evens.push(arr[i]); 
     } else { 
      odds.push(arr[i]); 
     } 
    } 
    return {evens, odds}; 
} 

divider(numbersArray); 
Verwandte Themen