[英]How to filter nested object using 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,
}
}
}
在此對象中,我有兩個字段key
和recordSts
,如果狀態為success
,則它們not null
。
我想使用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
但是它只給出一個字段的值,相反,我也想要該字段的名稱和第二個字段的名稱。 請幫忙。
謝謝。
您可以將_.pickBy
與我們的自定義predicate
,例如
_.forEach(records, function(record) {
record.data = _.pickBy(record.data, function(val) {
return !!val;
}
})
您可以使用_.omitBy
刪除虛假值
let res = _.forOwn(records, o => {
o.data = _.omitBy(o.data, v => {
return !v;
});
return o;
});
您可以使用mapValues() , 分配() ,和pickBy() :
_.mapValues(
records,
r => _.assign({}, r, { data: _.pickBy(r.data) })
);
這將產生一個新的records
對象,而不會改變原始對象。 我喜歡pickBy()
是默認情況下,它只會返回帶有真實值的屬性。 注意我們如何不傳遞謂詞? 之所以可行,是因為默認謂詞為identity() ,該謂詞僅將值用作真值測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.