簡體   English   中英

如何使用lodash過濾嵌套對象

[英]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,
        }
    }
}

在此對象中,我有兩個字段keyrecordSts ,如果狀態為success ,則它們not null

我想使用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

但是它只給出一個字段的值,相反,我也想要該字段的名稱和第二個字段的名稱。 請幫忙。

謝謝。

您可以將_.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM