【问题标题】:Filtering Nested Array with Lodash/Javascript使用 Lodash/Javascript 过滤嵌套数组
【发布时间】:2017-09-01 01:33:00
【问题描述】:

我有以下对象数组:

var sizeList = [
    { id: 1, title:"Test1",
        type:[{name:"Big", present:false}, {name:"Small", present:true}, {name:"Medium", present:false}]
    },

    { id: 2,title:"Test2",
        type:[{name:"Big", present:false}, {name:"Small", present:true}, {name:"Medium", present:false}]
    },
    { id: 3,title:"Test3",
        type:[{name:"Big", present:false}, {name:"Small", present:true}, {name:"Medium", present:true}]
    }
  ]

我想过滤此列表,其中 Medium 为 True。我目前有这个设置。

var specificSizes = _.filter(sizeList.type, { 'name': 'Medium', 'present': true })

这会一直返回一个空数组。我也试过这个:

       specificSizes = _.filter(sizeList.type, function (type) {
          return _.some(type, {'name': 'Medium', 'present':true})
        });

【问题讨论】:

  • 标题是关于“排序”的?应该对什么进行排序?
  • @RomanPerekhrest 哎呀,我的意思是过滤。我现在会更新

标签: javascript arrays list sorting lodash


【解决方案1】:

使用 lodash,您可以将条件包装在与原始对象相同的测试结构中。

_.filter(sizeList, { type: [{ name: 'Medium', present: true }] })

var sizeList = [{ id: 1, title: "Test1", type: [{ name: "Big", present: false }, { name: "Small", present: true }, { name: "Medium", present: false }] }, { id: 2, title: "Test2", type: [{ name: "Big", present: false }, { name: "Small", present: true }, { name: "Medium", present: false }] }, { id: 3, title: "Test3", type: [{ name: "Big", present: false }, { name: "Small", present: true }, { name: "Medium", present: true }] }],      
    result = _.filter(sizeList, { type: [{ name: 'Medium', present: true }] });

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

在纯 Javascript 中,您可以将 Array#filter 用于外部数组,并使用 Array#some 检查是否满足一个条件。

var sizeList = [{ id: 1, title: "Test1", type: [{ name: "Big", present: false }, { name: "Small", present: true }, { name: "Medium", present: false }] }, { id: 2, title: "Test2", type: [{ name: "Big", present: false }, { name: "Small", present: true }, { name: "Medium", present: false }] }, { id: 3, title: "Test3", type: [{ name: "Big", present: false }, { name: "Small", present: true }, { name: "Medium", present: true }] }],      
    result = sizeList.filter(function (a) {
        return a.type.some(function (b) {
            return b.name === 'Medium' && b.present;
        });
    });
  
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 这非常有用。非常感谢!
  • 谢谢!非常有帮助:)
猜你喜欢
  • 2019-04-14
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
  • 2017-01-10
相关资源
最近更新 更多