我只能返回一个数组。

4
我想把这个数组拆分成两个新的数组,一个是偶数数组,一个是奇数数组,并返回它们。但是当我运行下面的代码时,我只得到了奇数数组,为什么会这样?我该怎么解决呢?
谢谢!
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
请改用return {'even': even, 'odds': odds}; - skypjack
在调用方使用解构:let {even, odds} = numbersArray(...); - user5536315
7个回答

11
因为 JavaScript 只能返回一个值。永远。
return(evens, odds)

评估结果与

相同
return odds

由于被括号包裹的逗号运算符,因此出现了这种情况。

也许返回一个数组的数组(甚至是一个数组的对象)会很有用。

return [evens, odds]

除非你使用延续传递风格,从理论上讲,我是说,不要认真:D - user5536315
即使使用 CPS(或者在另一端使用生成器),一个表达式也只能产生一个值。 - user2864740
不可以,因为在 CPS 中返回意味着调用另一个 continuation,在 Javascript 中它是一个函数,而函数接受多个参数! - user5536315
@Iven 每个作为函数参数提供的表达式都会产生一个单独的参数值。这并不与我上面的陈述相矛盾。如果使用 cb((evens, odds)),仍然会导致相同的行为;而 cb(evens, odds) 使用两个不同的表达式产生不同的值。 - user2864740
是的,我认为它确实有用,但没有必要争论,因为几乎没有人使用 CPS。 - user5536315
@Iven 回调在某些情况下非常常见 - 但是与JavaScript中使用的“CPS”一样细粒度。我喜欢玩ReactJS; 它不是 CPS,也不是 promises,但它允许相当优雅地处理流。 - user2864740

2
评估表达式 (evens,odds) 的结果是odds,因此返回它。
这就是逗号运算符的工作原理。
请使用以下语句代替:
return { 'evens': evens, 'odds': odds };

作为一个例子:
var v = divider(numberArrays);
v.evens; // get evens this way
v.odds; // get odds this way

2
你应该将结果作为数组返回。
return [evens, odds];

然后访问结果:

var evens;
var odds;

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

2

Javascript中,你只能返回一个值。因此,如果你想返回多个值,可以将它们放在一个数组或对象中以分隔它们:

 return([evens, odds]);

或者

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

1

一个函数只能返回一个实体。最好将结果封装在单个对象中。

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

1
"

Es5不支持元组,您应该像这样将返回值包装在对象中

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

或者像其他答案所示,以数组的形式


1
你可以像这样返回一个对象:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接