过滤数组并将其转换为2D数组

时间:2018-01-17 20:27:50

标签: javascript arrays

昨天我看到了这篇有趣的帖子,并认为知道如何通过对给定参数进行排序来创建2D数组非常重要: How to get even numbers array to print first instead of odds?

以下是Ori Drori的代码片段。

我很想知道代码行是什么,以及哪个表达式对数据进行排序并创建2D数组。我认为它与[numbersArray [i]%2]有关,但是,余数运算符是否还剩下剩余的余数?

它也有点令人困惑,因为它只为数组设置了一个括号,并使用push()来制作2个不同的数组。

任何能帮助我理解这一点的参考资料也将非常感谢 - 谢谢!



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

function divider(numbersArray) {
  var evensOdds = [[], []];
  for (var i = 0; i < numbersArray.length; i++) {
    evensOdds[numbersArray[i] % 2].push(numbersArray[i]);
  }
  return evensOdds;
}

console.log(divider(numbersArray));
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:2)

evensOdds有2个数组元素。 evensOdds[0]代表第一个数组,它甚至可以保存nums。 evensOdds[1]是第二个元素,将保留奇数。

当您% 2为偶数时,对于奇数,将导致01。因此,当遍历数组时,您% 2将返回01,这使您可以访问evensOdds数组中的第一个或第二个数组并插入它。

结果数组未排序,但确实表示偶数和奇数之间的分割。要获得排序结果,您需要以下内容:

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

function divider(numbersArray) {
  var evensOdds = [[], []];
  for (var i = 0; i < numbersArray.length; i++) {
    evensOdds[numbersArray[i] % 2].push(numbersArray[i]);
  }
  return evensOdds.map(array=> array.sort((a,b)=>a-b));
}

console.log(divider(numbersArray));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

在共享代码中,$行是过滤数字并将其插入相应evensOdds[numbersArray[i] % 2]的部分,使用从array0返回的索引1表达式:

如果它返回numbersArray[i] % 2,那么它是一个0号码,它会被推送到第一个even,否则如果它返回array它就会被推送到1。是一个odd号,将被推入第二个数组。

另一种选择:

您只需使用Array.filter()方法过滤evensodds数组:

<强>演示:

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

var evens = numbersArray.filter(function(el) {
  return el % 2 == 0;
});

var odds = numbersArray.filter(function(el) {
  return el % 2 == 1;
});

console.log(evens);

console.log(odds);
&#13;
&#13;
&#13;