我从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
}]
},
]
任何知道如何使用下划线js完成此操作的人? 我很乐意使用下划线获得解决方案,因为我们在整个项目中使用它并且它看起来更干净,所以...
答案 0 :(得分:3)
您应该能够使用下划线的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>
&#13;