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

El código anterior para mí está creando un mapa de números pares, ahora también quiero tener una lista de números impares. ¿Necesito volver a recorrer la lista de números? o hay una manera de tener dos mapas usando el recorrido único de una matriz.

Estoy usando Javascript

5
user987316 26 feb. 2018 a las 10:55

5 respuestas

La mejor respuesta

Podría tomar el operador lógico NOT y asignar todos los valores booleanos.

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);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Con un enfoque de bucle único

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);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Con for ... of bucle

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);
.as-console-wrapper { max-height: 100% !important; top: 0; }
6
Nina Scholz 26 feb. 2018 a las 16:50

Intente esto usando $filter

const oddNumbers =[1, 3, 7, 2, 4, 16, 22, 23].filter((number) => number%2!==0);
console.log(oddNumbers);

 const evenNumber= [1, 3, 7, 2, 4, 16, 22, 23].filter((number) => number%2===0);
console.log(evenNumber);
-1
Ramesh Rajendran 26 feb. 2018 a las 08:06

Use el grupo de lodash By es un patten más genérico.

var _ = require('lodash');

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

var result = _.groupBy(numerList, function(ele) {
  return ele%2;
});

console.log(result); //=> { '0': [ 2, 4, 16, 22 ], '1': [ 1, 3, 7, 23 ] }

Si necesita agrupar una matriz en más de 2 grupos, por ejemplo 3 grupos, solo

var _ = require('lodash');

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

var result = _.groupBy(numerList, function(ele) {
  return ele%3;
});

console.log(result); //=> { '0': [ 3 ], '1': [ 1, 7, 4, 16, 22 ], '2': [ 2, 23 ] }
2
EthanGong 26 feb. 2018 a las 08:19

Aquí hay una manera de dividirlo de una vez con { {X0}}:

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

El resultado es una matriz con dos matrices adentro: la primera tiene los números pares y la segunda los impares.

20
Cristian Lupascu 26 feb. 2018 a las 08:00

Puede usar array.prototype.reduce y algunos destructuring:

var numberList = [1, 3, 7, 2, 4, 16, 22, 23];
var { evenList, oddList } = numberList.reduce((m, o) => {
    o % 2 === 0 ? m.evenList.push(o) : m.oddList.push(o);
    return m;
}, { evenList: [], oddList: []});

console.log("evenList: ", evenList);
console.log("oddList: ", oddList);
3
Faly 26 feb. 2018 a las 08:01