es6 вызов функции в цикле карты - PullRequest
0 голосов
/ 02 мая 2019

Следующий код работает нормально.

function getProducts(params) {
    return params.productQuantities
        .map(prod => ({
            purchaseOrderLine: null,
            haulerCostCode: getOrderLine(params, prod).haulCostCode,
            productCostCode: getOrderLine(params, prod).productCostCode,
            typeOfWork: getOrderLine(params, prod).productCostCode,
        }))
        .reduce((accumulator, currentValue) => {
            accumulator.push(currentValue);
            return accumulator;
        }, []);
}

function getOrderLine(params, ticketLine) {
    return params.orderDetail.order.orderLineItems
        .find(orderLine => orderLine.id == ticketLine.id);
}

Мой вопрос: как мне избежать нескольких вызовов getOrderLine ()?

Ответы [ 2 ]

2 голосов
/ 02 мая 2019

использовать тело функции вместо выражения функции:

.map(prod => {
   const o = getOrderLine(params, prod);
   return {
     purchaseOrderLine: null,
     haulerCostCode: o.haulCostCode,
     productCostCode: o.productCostCode,
     typeOfWork: o.productCostCode,
   }
 })
1 голос
/ 02 мая 2019

Вы можете использовать композицию функций -

const comp = (f, g) =>
  x => f(g(x))

const getOrderLine = params => ticketLine =>
  params.orderDetail.order.orderLineItems
    .find(orderLine => orderLine.id == ticketLine.id)

const makeProduct = orderLine =>
  ( { purchaseOrderLine: null
    , haulerCostCode: orderLine.haulCostCode
    , productCostCode: orderLine.productCostCode
    , typeOfWork: orderLine.productCostCode
    }
  )

const getProducts = params =>
    params.productQuantities
      .map(comp(makeProduct, getOrderLine(params)))

Я удалил бит reduce, потому что это не имеет никакого смысла.map уже создает новый массив.

Здесь есть и другие серьезные проблемы.Эти функции копаются в свойствах объекта, иногда на трех уровнях.Это создает тесную связь в вашей кодовой базе.См. Закон Деметры

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...