繁体   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