Ниже приведен пример черного ящика с чем-то вроде того, что я хотел бы сделать.
keyMany (arr: any[], cbk: (any) => string[])
given that arr === [e1, e2, e3] (but could be any length);
given cbk(e1) -> ['foo'];
given cbk(e2) -> ['foo', 'bar'];
given cbk(e3) -> ['baz', 'bar'];
тогда
output: {
foo: [e1, e2],
bar: [e2, e3],
baz: [e3]
}
Чтобы подвести итог происходящему, первый аргумент, который является коллекцией, применяет cbk
поэтапно, чтобы определить, к каким ключам в выводе должен быть элемент. Элемент может быть частью нескольких наборов ключей вывода.
Обратите внимание, что:
- Поскольку
cbk
, примененное к e1
, приводит только к foo
, e1
участвует только в наборе ключей вывода foo
.
- Поскольку
cbk
, примененное к e2
, приводит к foo
& bar
, e2
находится в наборах ключей вывода foo
& bar
.
- Аналогично для
e3
, только для наборов ключей bar
& baz
вместо.
В идеале e
в выходной коллекции, если объекты, будут ссылочно эквивалентны e
в входной коллекции.
Обратите внимание: первый вход
Мой вопрос: существует ли что-то подобное в Lodash? Избранные ответы на этот вопрос - да с номером версии или нет.
Кроме того, если такое поведение нелегко реализовать или это кажется полезным, у меня сейчас есть пиар на Lodash, чтобы добавить keyMany
API:
https://github.com/lodash/lodash/pull/4149/commits/cfe2918c905481f6f713be0a4e10cd4b60d32c4a