javascript - 使用 lodash .groupBy。如何对对象内的对象进行分组

标签 javascript angularjs lodash

我使用 lodash 的 _.groupBy 来得出以下数据:

{
   "Generic Drugs":[
                      {
                          itemDes: "Dulcolax",
                          itemGeneric: "Bisacodyl",
                          price: '10'
                      },
                      {
                          itemDes: "Celine",
                          itemGeneric: "Ascorbic Acid",
                          price: '10'
                      },
                          {
                          itemDes: "Vitamic C",
                          itemGeneric: "Ascorbic Acid",
                          price: '10'
                      }
                   ],
  "None-generic Drugs" : [
                           {
                             itemDes: "test 1",
                             itemGeneric: "",
                             price: '10'
                           },
                           {
                             itemDes: "test 2",
                             itemGeneric: "",
                             price: '10'
                           }                                 
                   ]
}

我想通过属性 itemGeneric 对 Generic Drugs 对象中的对象进行分组,以得到如下输出:

{
   "Generic Drugs":[
                      "Ascorbic Acid" : [  
                                          { itemDes: "Celine" }, 
                                          { itemDesc: "Vitamin C" }
                                        ],
                      "Bisacodyl" : [
                                       { itemDes: "Dolculax" } 
                                    ]
  "None-generic Drugs" : [
                           {
                             itemDes: "test 1",
                             itemGeneric: "",
                             price: '10'
                           },
                           {
                             itemDes: "test 2",
                             itemGeneric: "",
                             price: '10'
                           }                                 
                   ]
}

请有人帮我解决这个问题。感谢您的回答。 :)

最佳答案

对分组数据使用_.mapValues(),并按“itemGeneric”对每个值进行分组:

_.mapValues(grouped, function(group, key) {
      return key === 'Generic Drugs' ? _.groupBy(group, 'itemGeneric') : group;
});

var grouped = {
  "Generic Drugs": [{
    itemDes: "Dulcolax",
    itemGeneric: "Bisacodyl",
    price: '10'
  }, {
    itemDes: "Celine",
    itemGeneric: "Ascorbic Acid",
    price: '10'
  }, {
    itemDes: "Vitamic C",
    itemGeneric: "Ascorbic Acid",
    price: '10'
  }],
  "None-generic Drugs": [{
    itemDes: "test 1",
    itemGeneric: "",
    price: '10'
  }, {
    itemDes: "test 2",
    itemGeneric: "",
    price: '10'
  }]
};

var result = _.mapValues(grouped, function(group, key) {
      return key === 'Generic Drugs' ? _.groupBy(group, 'itemGeneric') : group;
});

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>

如果原始数据项是这样的:

  {
      type: "Generic Drugs",
      itemDes: "Dulcolax",
      itemGeneric: "Bisacodyl",
      price: '10'
  }

你可以这样做:

_(originalData).groupBy('type').mapValues(grouped, function(group, key) {
    return key === 'Generic Drugs' ? _.groupBy(group, 'itemGeneric') : group;
});

关于javascript - 使用 lodash .groupBy。如何对对象内的对象进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40883389/

相关文章:

javascript - 如何在angularjs中的提交功能上获取ng-repeat复选框值

javascript - isNaN ('Hello World!' ) 与 isNaN ('' )

javascript - 在 Javascript 中使用 "new"进行内存分配

JavaScript 语法错误还是更多?

android - 在 Ionic App 中通过手指(触摸)裁剪图像

javascript - Javascript 中 Scala 的 "for comprehension"

javascript - 在 Angular.js 中使用 &lt;script async> 标签

javascript - 如何从angularjs中的响应 header 读取 token

Lodash:按对象数组的属性进行联合

javascript - 我如何在 JavaScript 中以 lodash 的 wrap 样式构建过滤器链?