首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果属性值为真,则由多个属性组成的Lodash组

如果属性值为真,则由多个属性组成的Lodash组
EN

Stack Overflow用户
提问于 2016-10-19 19:10:30
回答 9查看 72.4K关注 0票数 35

我有一个车辆阵列,需要分组按制造和模型,只有当‘选定’属性是真实的。生成的对象应该包含make模型和count的属性。如何使用lodash将车辆对象组织成所需的结果对象。我能够获得按makeCode分组的vehicle对象,但我不知道如何按多个属性进行分组。

组由make code works组成

代码语言:javascript
复制
      var vehicles = _.groupBy(response.vehicleTypes, function(item)
      {
        return item.makeCode; // how to group by model code as well
      });

初始车辆

代码语言:javascript
复制
{
    id: 1, 
    selected: true, 
    makeCode: "Make-A", 
    modelCode: "Model-a", 
    trimCode: "trim-a", 
    yearCode: "2012"
},
{
    id: 2, 
    selected: false, 
    makeCode: "Make-A", 
    modelCode: "Model-a", 
    trimCode: "trim-a", 
    yearCode: "2013"
},
{
    id: 3, 
    selected: true, 
    makeCode: "Make-B", 
    modelCode: "Model-c", 
    trimCode: "trim-a", 
    yearCode: "2014"
},
{
    id: 25, 
    selected: true, 
    makeCode: "Make-C", 
    modelCode: "Model-b", 
    trimCode: "trim-b", 
    yearCode: "2012"
},
{
    id: 26, 
    selected: true, 
    makeCode: "Make-C", 
    modelCode: "Model-b", 
    trimCode: "trim-a", 
    yearCode: "2013"
}

结果对象

代码语言:javascript
复制
{
    Make-A: {
        Model-a: {
            count: 1
        }
    }
},

{
    Make-B: {
        Model-c: {
            count: 1
        }
    }
},
{
    Make-C: {
        Model-b: {
            count: 2
        }
    }
}
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2016-10-19 19:51:40

由于您已经在使用lodash,所以可以利用.filter函数。这将只返回selected为真的项。

代码语言:javascript
复制
var selectedVehicles = _.filter(response.vehicleTypes, 'selected');

现在您拥有了selectedVehicles数组,您可以使用原始代码按makeCode进行分组。

代码语言:javascript
复制
selectedVehicles = _.groupBy(selectedVehicles, function(item) {
  return item.makeCode;
});

这将返回一个对象,因此我们需要遍历这些键,并执行我们的第二个groupBy

代码语言:javascript
复制
_.forEach(selectedVehicles, function(value, key) {
  selectedVehicles[key] = _.groupBy(selectedVehicles[key], function(item) {
    return item.modelCode;
  });
});

由此,您将有一个对象的形式。我会让你从每个数组中得到计数。

代码语言:javascript
复制
{ 'Make-A': { 'Model-a': [ ... ] },
  'Make-B': { 'Model-c': [ ... ] },
  'Make-C': { 'Model-b': [ ..., ... ] } }
票数 32
EN

Stack Overflow用户

发布于 2018-01-25 16:23:57

我不确定这是否能解决您的问题,但是在group_by中您可以添加允许创建复合键的自定义逻辑。

请记住,SEPERATOR值应该相应地定义为您使用的数据源,如果"--“字符出现在模型或类型中,则不应该使用它们,因为它将不允许您逆转分组过程。

代码语言:javascript
复制
const SEPERATOR = "--";
_.chain(data).filter((item) => item.selected).groupBy((item)=>`${item.model}${SEPERATOR}${item.type}`).value();
票数 44
EN

Stack Overflow用户

发布于 2020-06-24 05:28:31

如果您专注于结果,下面的代码可以工作:

在我的例子中,BrandItem Code是属性

代码语言:javascript
复制
const products = _.groupBy(this.productsTable.data, (item) => {
    return [item['Brand'], item['Item Code']];
});
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40139667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档