使用下划线过滤掉嵌套对象并返回数组

问题描述

const newData = _.pluck(_.flatten(_.values(file)),'Message')

这是从这个巨大的嵌套对象返回一个包含所有消息值的数组的正确方法,这很棒。但是我想排除在对象中也设置为 local = true 的值。

我只想返回 ['LAJDH','NPSABA']。基本上我正在做的是编写测试在玩笑 这将打开数千个文件并返回给我一个数组以供使用。我正在导出这个对象,以便在我的笑话测试中的每次迭代中都需要。

这意味着尽可能快地执行此操作会很棒。

示例数据:

{ onorder: [],onGo: [],onDelivery:
   [ { Trigger: 'Ready To dispatch',Channel: 'Mail',Message: 'AJDSA',local: true
       Recipient: [Array],Filter: [Array] },{ Trigger: 'Ready to Delivery',Message: 'LAJDH',Recipient: [Array],Filter: [Array] } ],onDelay:
   [ { Trigger: 'Delay',Message: 'ABJSH',local: true,onDelivered:
   [ { Trigger:
       'Delivered',Message: 'NPSABA',Filter: [Array] } ] }

解决方法

_.reject 是 Underscore 的否定过滤函数。您需要做的就是将其夹在 _.flatten_.pluck 之间。请注意,此代码使用 iteratee shorthand

const newData = _.pluck(_.reject(_.flatten(_.values(file)),{local: true}),'Message');

提示:像这样的长表达式使用 _.chain 变得更具可读性。

const newData = _.chain(file)
    .values()
    .flatten()
    .reject({local: true})
    .pluck('Message')
    .value();