Я работаю над некоторыми проектами Angular и использую lodash в качестве помощника. Я прочитал много статей о том, как правильно импортировать lodash, чтобы уменьшить размер пакета. Но у меня возникла проблема с моей текущей реализацией, потому что я использую метод цепочки lodash.
return _(items)
.groupBy(x => x.vote.code)
.map(items => items)
.value();
import * as _ from 'lodash';
Я читал импорт * не хорошо.
Моя проблема в том, как я могу импортировать _(items)
, чтобы мой импорт выглядел, как показано ниже?
import groupBy from 'lodash/groupBy';
Если вы хотите импортировать только одну функцию или группу функций:
import { groupBy } from "lodash";
Ну, на самом деле вам нужно import *
, потому что _
— это функция.
Если вы хотите уменьшить размер пакета, вам следует избегать импорта всего Lodash. Вместо этого вы можете просто импортировать нужные вам функции — groupBy
и map
.
Однако в этом случае вы также используете цепочку, для которой делает требуется весь Lodash. Вы можете переписать свой код, используя flow
, и использовать удобный для программирования пакет Lodash для замены цепочки:
import {flow, groupBy, map} from 'lodash/fp';
/* ... */
const chainReplacement = flow(groupBy(x => x.vote.code), map(items => items));
return chainReplacement(items)
Вот краткая иллюстрация того, что они дают одинаковые результаты:
const {flow, groupBy, map} = _;
//sample data
const items = [
{ vote: { code: "1" }, name: "Alice"},
{ vote: { code: "2" }, name: "Bob"},
{ vote: { code: "1" }, name: "Carol"},
{ vote: { code: "2" }, name: "Dave"},
{ vote: { code: "1" }, name: "Edel"}
];
//using literally the same functions
const groupByCallback = x => x.vote.code;
const mapCallback = items => items.length;
const chain = _(items)
.groupBy(groupByCallback)
.map(mapCallback);
const chainReplacement = flow(
groupBy(groupByCallback),
map(mapCallback)
);
console.info("chain", chain.value())
console.info("chainReplacement", chainReplacement(items))
<script src = "https://cdnjs.cloudflare.com/ajax/libs/lodash-fp/0.10.4/lodash-fp.min.js"></script>
Я сделал некоторые данные, соответствующие вашему использованию groupBy
, но затем мне пришлось изменить обратный вызов map
, потому что это не имело смысла. Я предполагаю, потому что это было для иллюстративных целей. Поэтому я поменял его на items => items.length
, чтобы получить количество каждой группы. Это не очень важно, но это также только для иллюстративной цели.
Какой эквивалентный метод для
_(items)
? Из-за этого мне нужно импортировать *