Мне интересно, есть ли способ отфильтровать массив или поток и применить функцию A ко всем совпадениям и функцию B ко всем несовпадениям в JavaScript. Вот пример кода, который объясняет это немного подробнее:
// initial data
var names = ['Matthias', 'Maria', 'Bob', 'Anton'];
var namesWithM;
var namesWithoutM;
// gets only names starting with M, but not the others at the same time
namesWithM = names.filter(name => name.startsWith('M'))
// conditional lambda version
namesWithM = [];
namesWithoutM = [];
names.forEach(name => name.startsWith('M') ? namesWithM.push(name) : namesWithoutM.push(name));
// conditional classical version
namesWithM = [];
namesWithoutM = [];
names.forEach(function(name) {
if (name.startsWith('M'))
namesWithM.push(name)
else
namesWithoutM.push(name);
});
Самая первая версия обрабатывает только совпадения, но использует filter
, а не forEach
. Есть ли способ использовать filter
и применить функцию для совпадений и несовпадений одновременно? Что-то вроде этого псевдокода:
names.filter(name.startsWith('M')).apply(namesWithM::push).or(namesWithoutM::push);