您好我有这些数据:
[
{amount:1, position:1},
{amount:1, position:2},
{amount:1, position:3},
{amount:2, position:4},
{amount:2, position:5}
]
我希望将它们转换为
[{amount: 1, range: "1-3"}, {amount: 2, range: "4-5"}]
是否有可以执行此操作的库?
修改
我首次尝试使用下划线。我按金额对它们进行分组,然后对它们进行映射。但这是最好的方式吗?
data = _.groupBy(data, function (item) {
return item.amount;
})
data = _.map(data, function (item, index) {
return {
amount: index,
range: _.first(item).position + "-" + _.last(item).position
}
})
答案 0 :(得分:0)
我建议你使用http://underscorejs.org或https://lodash.com,它们都没有直接解决问题的功能,但你可以用创造性的方式组合一些现有的功能来做到这一点:)运气。
答案 1 :(得分:0)
你应该学习函数式编程=]< 3
var y = [{amount:1, position:1},{amount:1, position:2}, {amount:1, position:3}, {amount:2, position:4}, {amount:2, position:5}]
var amounts = []
y.map(function(obj){
obj = y.reduce(function(a,i,ii){
if (ii === 1){
if (a.amount === obj.amount){
a.position = 1
a.set = true
}else{
a.amount = obj.amount
a.set = false
}
return a
}
if (i.amount === a.amount && !a.set){
a.set = true
a.position = i.position
return a
}
if (a.amount === i.amount)
a.range = i.position
return a
})
return {amount:obj.amount,range:obj.position+'-'+obj.range}
})
.filter(function(obj){
if (!amounts[obj.amount]){
amounts[obj.amount] = true
return true
}
return false
})