JavaScript中的数组遍历用于填充两个映射

use*_*316 5 javascript arrays angularjs

var numerList = [1, 3, 7, 2, 4, 16, 22, 23];
var evenNoLst = numerList.map(function(no) {
  return ((no % 2) === 0);
});
console.log(evenNoLst)
Run Code Online (Sandbox Code Playgroud)

以上代码对我来说是创建偶数数字的地图,现在我也想要有奇数列表.我是否需要再次遍历号码列表?或者有没有办法使用单个遍历数组的两个地图.

我正在使用Javascript.

Cri*_*scu 20

这是一种将它分开的方法reduce:

var numberList = [1, 3, 7, 2, 4, 16, 22, 23];

var grouped = numberList.reduce(function (acc, x){  
  acc[x%2].push(x);
  return acc;
}, [[], []]);

console.log(grouped);
Run Code Online (Sandbox Code Playgroud)

结果是一个内部有两个数组的数组:第一个数组为偶数,第二个数组为奇数.


Nin*_*olz 6

您可以使用逻辑NOT运算符并映射所有布尔值.

var numerList = [1, 3, 7, 2, 4, 16, 22, 23],
    evenNoLst = numerList.map(no => no % 2 === 0),
    oddNoLst = evenNoLst.map(b => !b);

console.log(evenNoLst);
console.log(oddNoLst);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)

采用单循环方式

var numerList = [1, 3, 7, 2, 4, 16, 22, 23],
    oddNoLst = [],
    evenNoLst = [];

numerList.forEach(function (no) {
    var even = no % 2 === 0;
    evenNoLst.push(even);
    oddNoLst.push(!even);
});

console.log(evenNoLst);
console.log(oddNoLst);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)

for ... of循环

var numerList = [1, 3, 7, 2, 4, 16, 22, 23],
    oddNoLst = [],
    evenNoLst = [],
    no, even;

for (no of numerList) {
    even = no % 2 === 0;
    evenNoLst.push(even);
    oddNoLst.push(!even);
}

console.log(evenNoLst);
console.log(oddNoLst);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)

  • 那种"单循环"的方法太难看了......"map"与副作用不太合适. (10认同)