Как создать подмножество массива, используя другой с логическими значениями, используя lodash - PullRequest
0 голосов
/ 03 февраля 2020

Я не смог найти это в документации, есть ли встроенный простой способ подмножества массива с использованием логического массива для фильтрации? В loda sh или es6

я часто использовал эту функцию в R, и она казалась весьма полезной. В последнее время я столкнулся с несколькими случаями использования, когда я мог использовать что-то подобное, но не мог выяснить, поддерживается ли оно из коробки.

что-то вроде

subset([1, 2, 3, 4, 5], [true, false, false, false, true]) // => [1, 5]

Ответы [ 3 ]

2 голосов
/ 03 февраля 2020

Быстрый способ сделать это будет выглядеть примерно так:

const f = (as, bs) => as.filter((_, i) => bs[i])
f([1, 2, 3, 4, 5], [true, false, false, false, true])  // => [1, 5]

Это предполагает, что два массива имеют одинаковую длину, которая может быть, а может и не соответствовать желаемой.

1 голос
/ 03 февраля 2020

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 функцию массива. Он имеет подпись, которая принимает индекс, также вы можете использовать его для фильтрации вашего массива, как показано ниже:

0 голосов
/ 03 февраля 2020

Как насчет следующего?

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