Просто чтобы уточнить, что я имею в виду под "перевернутой картой":
const foo =
{ "a": 10
, "b": 20
};
const foo_inverted =
{ "10": "a"
, "20": "b"
};
У меня есть этот объект, представляющий файл:
const file =
{ id: 100
, tags: [20, 30]
};
Имеется список Файлы, которые мне нужны, чтобы построить карту, которая позволит мне найти все файлы с данным тегом.
Из этого:
const files =
[ { id: 100
, tags: [20, 30]
}
, { id: 200
, tags: [20, 40]
}
];
Для этого:
{ "20": { "100": 1, "200": 1 }
, "30": { "100": 1 }
, "40": { "200": 1 }
}
I в конечном итоге с этим кодом, который выполняет работу:
const tag_file = (tag_id, file_id) => ({[tag_id]: {[file_id]: 1}});
const mergeDeepAll = reduce(mergeDeepRight, {});
const tag_map = compose(mergeDeepAll, lift(tag_file));
const tags_map = compose(mergeDeepAll, map(({id, tags}) => tag_map(tags, [id])));
tags_map(files);
//=> { "20": { "100": 1, "200": 1 }
//=> , "30": { "100": 1 }
//=> , "40": { "200": 1 }
//=> }
Вопрос: я пропустил какие-либо концепции функционального программирования, которые позволили бы мне express это лучше?