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