[英]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.