按金额分组并显示第一个和最后一个位置

时间:2015-11-06 01:40:58

标签: javascript

您好我有这些数据:

[
 {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
    }
})

2 个答案:

答案 0 :(得分:0)

我建议你使用http://underscorejs.orghttps://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
})