累积求和/排序 JavaScript
cumulative summing/sorting javascript
嗨,我有一个看起来像这样的数组。
var data = [
{beb: 200, cre: 0, id: 'A1'},
{beb: 0, cre: 200, id: 'A2'},
{beb: 0, cre: 100, id: 'A4'},
{beb: 0, cre: 100, id: 'A3'},
]
我怎么会让它看起来像这样?
var newData = [
{deb: 200, cre: 0, total: 200, id: 'A1'},
{deb: 0, cre: 200, total: 0, id: 'A2'},
{deb: 0, cre: 100, total: -100, id: 'A3'},
{deb: 0, cre: 100, total: -200, id: 'A4'},
]
重要的是,数组需要首先在id上排序,然后在deb - cre +上一行的总数上计算总数。
我目前正在设置中使用 d3,但我无法为此找到一个好的解决方案,计算出的总数没有保存在正确的对象上,可能是因为循环内的排序错误。
因此,如果使用 d3 有一个干净的解决方案,我会非常高兴,因为如果我稍后添加其他属性,我可以轻松使用 map 或键。
谢谢。
编辑
var calc = [];
var count = 0;
var newArr = data.sort(function(a, b){
return a.id - b.id;
})
for(var i = 0; i < newArr.length; i++){
var item = newArr[i];
count += item.deb - item.cred
calc.push({deb: item.deb, cre: item.deb, total: count, id: item.id })
}
对于排序部分,我已经尝试了a.id - b.id
和b.id - a.id
这样做的一个问题是它似乎没有按照我需要的顺序完成,并且使用这种方式我没有简单的方法将其与 d3 映射.js所以我更喜欢使用它的解决方案。
data = data.sort(function(a, b) {
// to sort by number
// we need to get the number of the id first
// if the id will also change the part before the number this will have to be adjusted (just use the search)
var aid = parseInt(a.id.replace(/[^'d]/, ''), 10),
bid = parseInt(b.id.replace(/[^'d]/, ''), 10);
return aid - bid;
}).map(function(d, idx, arr) {
// now we can calculate the total value
// previous data entry, or if it is the first round, a fake object
var previousData = (arr[idx - 1] || {"total": 0});
// calc the total value
d.total = (d.beb - d.cre) + previousData.total;
return d;
});
小提琴
相关文章:
- sort而不是排序javascript
- 我们如何自定义排序JavaScript对象键
- 以相同的方式对多个数组进行排序Javascript
- 重新排序 JavaScript 数组
- 比较和排序 JavaScript 数组
- 按特定顺序对数组进行排序 javascript
- 如何根据数组对对象进行排序 - javascript
- 组合然后排序Javascript数组.得到不可预测的结果
- 如何根据另一个数组的排序方式对一个数组进行排序?(Javascript)
- 如何更好地重新排序javascript代码
- 按对象属性排序javascript数组
- 递减While循环排序Javascript
- 累积求和/排序 JavaScript
- 按字母顺序排序javascript填充的选择列表
- 嵌套对象JSON排序JavaScript
- 排序javascript数组,使空白值总是在底部
- 基于任意长度的属性排序JavaScript对象数组
- 冒泡排序Javascript
- 按键值递归排序JavaScript对象
- 如何按日期排序javascript数组