#javascript #jestjs #underscore.js
#javascript #jestjs #underscore.js
Вопрос:
const newData = _.pluck(_.flatten(_.values(file)), 'Message')
Это правильный способ вернуть массив со всеми значениями сообщений из этого гигантского вложенного объекта, и это здорово. Однако я хочу исключить значения, которые также заданы с помощью local = true в объекте.
Я хочу только вернуть [‘LAJDH’, ‘NPSABA’] . По сути, я пишу тесты в шутку, которые открывают тысячи файлов и возвращают мне массив для использования. Я экспортирую этот объект, который требуется на каждой итерации в моем тесте jest.
Это означает, что было бы здорово выполнить это как можно быстрее.
Пример данных:
{ onOrder: [],
onGo: [],
onDelivery:
[ { Trigger: 'Ready To Dispatch',
Channel: 'Mail',
Message: 'AJDSA',
local: true
Recipient: [Array],
Filter: [Array] },
{ Trigger: 'Ready to Delivery',
Channel: 'Mail',
Message: 'LAJDH',
Recipient: [Array],
Filter: [Array] } ],
onDelay:
[ { Trigger: 'Delay',
Channel: 'Mail',
Message: 'ABJSH',
local: true,
Recipient: [Array],
Filter: [Array] } ],
onDelivered:
[ { Trigger:
'Delivered',
Channel: 'Mail',
Message: 'NPSABA',
Recipient: [Array],
Filter: [Array] } ] }
Ответ №1:
_.reject
это отрицательная функция фильтра подчеркивания. Все, что вам нужно сделать, это поместить его между _.flatten
и _.pluck
. Обратите внимание, что в этом коде используется сокращение iteratee .
const newData = _.pluck(_.reject(_.flatten(_.values(file)), {local: true}), 'Message');
Совет: длинные выражения, подобные этим, становятся более удобочитаемыми _.chain
.
const newData = _.chain(file)
.values()
.flatten()
.reject({local: true})
.pluck('Message')
.value();