将数组对象合并在一起 - lodash
merge array object together - lodash
所以我有一系列这样的项目:
items = [
{
amount: 2,
name: 'bike'
},
{
amount: 1,
name: 'boat'
},
{
amount: 3,
name: 'bike'
}
]
现在,我想合并这个数组,这样就不会有重复的自行车,并且仍然知道总共有多少辆自行车。
所以我的结果数组将如下所示:
items = [
{
amount: 5,
name: 'bike'
},
{
amount: 1,
name: 'boat'
}
]
为了使我的代码简短,有人建议我使用 lodash
,并且我一直在寻找将数组合并在一起的不同方法。但老实说,弄清楚最好的方法是什么很令人困惑,这就是为什么我要问你们 ^^
如果你不想专门为这个例子加载 lodash
(不确定额外的 50K 是否值得你在这里多写几行代码)这里有一个普通的 JS 版本,它使用一个临时对象,用于在您遍历各种对象时保存值:
function merge(items) {
var tmp = {}, out = [];
for (var i = 0, l = items.length; i < l; i++) {
var name = items[i].name;
var amount = items[i].amount;
if (!tmp[name]) tmp[name] = 0;
tmp[name] += amount;
}
for (var p in tmp) {
out.push({ name: p, amount: tmp[p] });
}
return out;
}
merge(items); // [{"name":"bike","amount":5},{"name":"boat","amount":1}]
您可以使用 .groupBy
with .map
, and _.sum
来计算 amount
,像这样
var items = [{
amount: 2,
name: 'bike'
}, {
amount: 1,
name: 'boat'
}, {
amount: 3,
name: 'bike'
}];
var res = _(items)
.groupBy('name')
.map(function (el, name) {
return {
name: name,
amount: _.sum(el, 'amount')
};
})
.value();
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.7.0/lodash.min.js"></script>
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
所以我有一系列这样的项目:
items = [
{
amount: 2,
name: 'bike'
},
{
amount: 1,
name: 'boat'
},
{
amount: 3,
name: 'bike'
}
]
现在,我想合并这个数组,这样就不会有重复的自行车,并且仍然知道总共有多少辆自行车。
所以我的结果数组将如下所示:
items = [
{
amount: 5,
name: 'bike'
},
{
amount: 1,
name: 'boat'
}
]
为了使我的代码简短,有人建议我使用 lodash
,并且我一直在寻找将数组合并在一起的不同方法。但老实说,弄清楚最好的方法是什么很令人困惑,这就是为什么我要问你们 ^^
如果你不想专门为这个例子加载 lodash
(不确定额外的 50K 是否值得你在这里多写几行代码)这里有一个普通的 JS 版本,它使用一个临时对象,用于在您遍历各种对象时保存值:
function merge(items) {
var tmp = {}, out = [];
for (var i = 0, l = items.length; i < l; i++) {
var name = items[i].name;
var amount = items[i].amount;
if (!tmp[name]) tmp[name] = 0;
tmp[name] += amount;
}
for (var p in tmp) {
out.push({ name: p, amount: tmp[p] });
}
return out;
}
merge(items); // [{"name":"bike","amount":5},{"name":"boat","amount":1}]
您可以使用 .groupBy
with .map
, and _.sum
来计算 amount
,像这样
var items = [{
amount: 2,
name: 'bike'
}, {
amount: 1,
name: 'boat'
}, {
amount: 3,
name: 'bike'
}];
var res = _(items)
.groupBy('name')
.map(function (el, name) {
return {
name: name,
amount: _.sum(el, 'amount')
};
})
.value();
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.7.0/lodash.min.js"></script>
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>