我有一个对象,看起来像这样:
{
'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,
}
}
}
在此对象中,我有两个字段key
和recordSts
,如果状态为not null
则为success
。
我想使用lodash过滤此对象,输出应该如下所示
{
'somename1':{
status:'success',
data:{
key:'value1',
status:'value1',
}
},
'someOtherName':{
status:'success',
data:{
key:'value1',
status:'value1',
}
}
}
我只想删除包含null
或empty
或0
值的密钥。
我试过了:
_.map(records, 'key'); //records contains my input object
但它只给出一个字段的值,相反,我想要字段的名称和第二个字段。请帮忙。
感谢。
答案 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(),它只是将该值用作真值测试。