组对象数组下划线js

group objects array underscore js

我从 URL 中得到一个数组,如下所示:

[
   {
     id : 1,
     product_id : 101,
     price_new : 80,
     price_old : 90
   },
   {
     id : 2,
     product_id : 101,
     price_new : 80,
     price_old : 90
   },
   {
     id : 3,
     product_id : 102,
     price_new : 80,
     price_old : 90
   },
]

我想将其转换为:

[
   {
     product_id : 101,
     offers : [
     {
       id: 1
       price_new : 80,
       price_old : 90
     },{
       id: 2
       price_new : 80,
       price_old : 90
     }]
   },
   {
     product_id : 102,
     offers: [{
       id : 3,
       price_new : 80,
       price_old : 90
     }]
   },
]

有人知道如何使用 underscore js 完成这项工作吗? 很想得到一个使用下划线的解决方案,因为我们在整个项目中都在使用它,而且它看起来更干净,所以...

您应该能够使用下划线的 groupBy 方法对它们进行分组,尽管它不会(自行)从每条记录中删除 product_id。然后您可以获取每个键并将它们用作数组元素。

var data = [{
  id: 1,
  product_id: 101,
  price_new: 100,
  price_old: 90
}, {
  id: 2,
  product_id: 101,
  price_new: 100,
  price_old: 90
}, {
  id: 3,
  product_id: 102,
  price_new: 100,
  price_old: 90
}, ];

var grouped = _.chain(data).groupBy("product_id").map(function(offers, product_id) {
  // Optionally remove product_id from each record
  var cleanOffers = _.map(offers, function(it) {
    return _.omit(it, "product_id");
  });

  return {
    product_id: product_id,
    offers: cleanOffers
  };
}).value();

document.getElementById("results").textContent = JSON.stringify(grouped);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore-min.js"></script>
<pre id="results"></pre>