簡體   English   中英

使用lodash或JavaScript過濾此對象的最佳方法是什么?

[英]What is the best way to filter this object using lodash or JavaScript?

我有這樣的物體

 var result = {
    case1: {
        documents: [{
            versionSeriesId: 'BkO9EXxL',
            documentTypeId: '80',
            isDeleted: false
        }],
        answer: true
    },
    case2: {
        documents: [{
            versionSeriesId: 'BkO9EXxL',
            documentTypeId: '80',
            isDeleted: false
        }],
        answer: true
    },
    case3: {
        documents: []
    },
    case4: {
        documents: [{
            versionSeriesId: 'BkO9EXxL',
            documentTypeId: '80',
            isDeleted: false
        }],
        answer: false
    }
}

我想過濾僅具有答案的對象:true 結果應該是這樣的:

{
    case1: {
        documents: [{
            versionSeriesId: 'BkO9EXxL',
            documentTypeId: '80',
            isDeleted: false
        }],
        answer: true
    },
    case2: {
        documents: [{
            versionSeriesId: 'BkO9EXxL',
            documentTypeId: '80',
            isDeleted: false
        }],
        answer: true
    }
}

我怎樣才能做到這一點?

您只需使用Object.keys ,然后使用Array.forEach方法編譯新對象,即可快速完成此過程,而無需外部庫。

var filtered = {};
Object.keys(result).forEach(function(item) {
  if (result[item].answer === true) {
    filtered[item] = result[item];
  }
});

使用以下代碼段進行測試:

 var result = { case1: { documents: [{ versionSeriesId: 'BkO9EXxL', documentTypeId: '80', isDeleted: false }], answer: true }, case2: { documents: [{ versionSeriesId: 'BkO9EXxL', documentTypeId: '80', isDeleted: false }], answer: true }, case3: { documents: [] }, case4: { documents: [{ versionSeriesId: 'BkO9EXxL', documentTypeId: '80', isDeleted: false }], answer: false } } var filtered = {}; Object.keys(result).forEach(function(item) { if (result[item].answer === true) { filtered[item] = result[item]; } }); console.log(filtered); 

您可以像這樣使用Lodash pickBy函數:

_.pickBy(result, function(c){return c.answer});

pickBy “創建一個由對象屬性謂詞返回的對象組成的對象,”( docs )。 在您的示例中,您需要一個對象,其answer為真,因此謂詞僅返回該值。

Object.keys()為您提供數組的鍵,並允許您遍歷屬性。 然后,您可以根據條件過濾它們,並將正確的屬性添加到新對象。

var out = {};

Object.keys(result).filter(function(item) {
    return result[item].answer === true;
}).map(function(item) {
    out[item] = result[item];
});

文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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