重新排列JSON对象

时间:2017-03-20 17:08:06

标签: javascript json underscore.js

我的数据库来自数据库:

[
  {
    ID: 1,
    UPC: 11111,
    Qty: 1,
    Price: 1.99
  },
  {
    ID: 2,
    UPC: 11111,
    Qty: 2,
    Price: 1.99
  },
  {
    ID: 3,
    UPC: 22222,
    Qty: 1,
    Price: 9.99
  },
  {
    ID: 4,
    UPC: 11111,
    Qty: 3,
    Price: 1.99
  },
  {
    ID: 5,
    UPC: 22222,
    Qty: 9,
    Price: 9.99
  }
]

在页面中,如果他们点击了一个按钮,我需要重新排列它,如下所示:

[
  {
    UPC: 11111,
    Qty: 6,
    Price: 1.99
  },
  {
    UPC: 22222,
    Qty: 10,
    Price: 9.99
  }
]

我该怎么转换呢? 99%的时间我需要原始数据集,所以最初像第二个数据集一样返回它不是一个选项。

TIA。

1 个答案:

答案 0 :(得分:0)

使用评论中上面发布的链接,我设法完成了这项工作。我觉得使用Underscore.js可能有一种更有效的方式,但由于我无法弄清楚,这样做会有。

var tmpItems = {};
for (var i = items.length; i--;)
{
  // init an array, if it is not there
  tmpItems[it.All[i]['UPC']] = tmpItems[it.All[i]['UPC']] || [];

  tmpItems[it.All[i]['UPC']]['Qty'] = (tmpItems[it.All[i]['UPC']]['Qty'] || 0) + (it.All[i]['Qty'] || 0);
  tmpItems[it.All[i]['UPC']]['Price'] = (it.All[i]['Price'] || 0);
}

// convert back to an object
var newItems = [];
for (var key in tmpItems)
{
  if (tmpItems.hasOwnProperty(key))
  {
    newItems.push({ 'UPC': key, 'Qty': tmpItems[key]['Qty'], 'Price': tmpItems[key]['Price'] });
  }
}