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

Выше код для меня создает карту четных чисел, теперь я также хочу иметь список нечетных чисел. Нужно ли снова просматривать список номеров? или есть способ иметь две карты, используя один обход массива.

Я использую Javascript.

5
user987316 26 Фев 2018 в 10:55

5 ответов

Лучший ответ

Вы можете взять логический оператор 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);
.as-console-wrapper { max-height: 100% !important; top: 0; }

С однопетлевым подходом

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

С циклом 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);
.as-console-wrapper { max-height: 100% !important; top: 0; }
6
Nina Scholz 26 Фев 2018 в 16:50

Попробуйте это с помощью $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 Фев 2018 в 08:06

Используйте lodash's groupBy - более общий шаблон.

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 ] }

Если вам нужно сгруппировать массив в более чем 2 группы, например 3 группы, просто

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 Фев 2018 в 08:19

Вот способ разделить его за один раз с помощью 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);

В результате получается массив с двумя массивами внутри: первый имеет четные числа, а второй - нечетные.

20
Cristian Lupascu 26 Фев 2018 в 08:00

Вы можете использовать array.prototype.reduce и некоторые 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 Фев 2018 в 08:01