admin管理员组

文章数量:1315792

I'm trying to take this array and split it into 2 new arrays, evens and odds and return them. When I run the code below I am only getting the odds, why is that? And what can I do to solve it?

Thanks in advance.

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

I'm trying to take this array and split it into 2 new arrays, evens and odds and return them. When I run the code below I am only getting the odds, why is that? And what can I do to solve it?

Thanks in advance.

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);
Share Improve this question edited May 29, 2016 at 20:53 Raktim Biswas 4,0875 gold badges29 silver badges34 bronze badges asked May 29, 2016 at 20:08 DominicDominic 7371 gold badge7 silver badges14 bronze badges 2
  • 3 Use return { 'even': even, 'odds': odds }; instead. – skypjack Commented May 29, 2016 at 20:12
  • And use destructuring on the caller side: let {even, odds} = numbersArray(...); – user5536315 Commented May 29, 2016 at 20:24
Add a ment  | 

7 Answers 7

Reset to default 11

Because JavaScript can only return one value. Ever.

return(evens, odds)

evaluates to the same value as

return odds

due to the ma operator wrapped in grouping parenthesis.

Perhaps returning an array of arrays (or even an object of arrays) is useful..

return [evens, odds]

You should return your results as an array.

return [evens, odds];

And then to access the results:

var evens;
var odds;

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

In Javascript, you can only return ONE value. So, if you want to return multiples values, to separate them, you can put them in an array or in an object :

 return([evens, odds]);

OR

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

The result of evaluating (evens, odds) is odds, that is returned thus.
This is how ma operator works.

Use the following statement instead:

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

As an example:

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

You can return only one entity from a function. Its better to wrap your results in single object.

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

Es5 doesn't support tuples, You should wrap your return

in an object like here

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

Or in an array as the other aswers show

You could return an object, like this:

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

本文标签: javascriptI39m only able to return 1 arrayStack Overflow