Я не смог найти это в документации, есть ли встроенный простой способ для подмножества массива с использованием логического массива для фильтрации? В лодаш или эс6
Я часто использовал эту функцию в R
, и она показалась мне весьма полезной. В последнее время я столкнулся с несколькими случаями использования, когда я мог использовать что-то подобное, но не мог выяснить, поддерживается ли оно из коробки.
Что-то типа
subset([1, 2, 3, 4, 5], [true, false, false, false, true]) // => [1, 5]
3 ответа
const arr = [1, 2, 3, 4, 5];
const filter = [true, false, false, false, true];
const result = arr.filter((r, i) => filter[i]);
console.log(result);
Вы можете использовать встроенную функцию filter
массива. Он имеет подпись, которая принимает индекс, также вы можете использовать его для фильтрации вашего массива, как показано ниже:
Как насчет следующего?
zip=rows=>rows[0].map((_,c)=>rows.map(row=>row[c]))
zip([[1, 2, 3, 4, 5], [true, false, false, false, true]]).filter(e => e[1])
// [ [ 1, true ], [ 5, true ] ]
Быстрый способ сделать это будет что-то вроде
const f = (as, bs) => as.filter((_, i) => bs[i])
f([1, 2, 3, 4, 5], [true, false, false, false, true]) // => [1, 5]
Это предполагает, что два массива имеют одинаковую длину, которая может быть, а может и не быть тем, что вы хотите.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.