组对象数组下划线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>
我从 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>