如何使用lodash

时间:2017-03-07 11:52:17

标签: javascript arrays object lodash

我有一个对象,看起来像这样:

{
    'somename1':{
        status:'success',
        data:{
            key:'value1',
            field2:'',
            field3:'',
            field4:'',
            field5:'',
            recordSts:'done',
        }
    },
    'someOtherName':{
        status:'success',
        data:{
            key:'value2',
            field2:0,
            field3:'',
            recordSts:'progress',
            field5:'',
            field6:0,
        }
    }
}

在此对象中,我有两个字段keyrecordSts,如果状态为not null则为success

我想使用lodash过滤此对象,输出应该如下所示

{
    'somename1':{
        status:'success',
        data:{
            key:'value1',
            status:'value1',
        }
    },
    'someOtherName':{
        status:'success',
        data:{
            key:'value1',
            status:'value1',
        }
    }
}

我只想删除包含nullempty0值的密钥。

我试过了:

_.map(records, 'key'); //records contains my input object

但它只给出一个字段的值,相反,我想要字段的名称和第二个字段。请帮忙。

感谢。

3 个答案:

答案 0 :(得分:0)

您可以将_.pickBy与我们的自定义predicate一起使用,例如

_.forEach(records, function(record) {
  record.data = _.pickBy(record.data, function(val) {
      return !!val;
    }
  })

答案 1 :(得分:0)

您可以使用const accountSid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; const authToken = 'your_auth_token'; const workspaceSid = 'WSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; const twilio = require('twilio') const client = twilio(accountSid, authToken); app.post('/gather_result', function(req, res) { const twiml = new twilio.twiml.VoiceResponse(); if (req.body.Digits && req.body.Digits.length > 0) { // There was a positive result, call the Queue and connect the caller const dial = twiml.dial(); dial.queue({queue: req.query.ReservationSid}); res.send(twiml.toString()); } else { // no response, reject the reservation. client.taskrouter.v1 .workspaces(workspaceSid) .tasks(req.query.TaskSid) .reservations(req.query.ReservationSid) .update({ reservationStatus: 'rejected' }) .then(function() { // once the reservation is updated, then hangup the call. twiml.hangup(); res.send(twiml.toString()); }); } }); 删除虚假值

_.omitBy

答案 2 :(得分:0)

您可以使用mapValues()assign()pickBy()

_.mapValues(
  records, 
  r => _.assign({}, r, { data: _.pickBy(r.data) })
);

这会生成一个新的records对象,而不会改变原始对象。我喜欢pickBy()的是,默认情况下,它只返回带有 truthy 值的属性。请注意我们如何不传递谓词?这是有效的,因为默认谓词是identity(),它只是将该值用作真值测试。