数组连续元素的总和
Array consecutive elements sum
我有一个像下面这样的数组
var data = [{
category: "2014-1-1",
subCategory: [{
name: "shoe",
val: 70,
toolTip: "toolTip-shoe-70",
drill: false
}, {
name: "pant",
val: 60,
toolTip: "toolTip-pant-60",
drill: false
}, {
name: "shirt",
val: 50,
toolTip: "toolTip-shirt-50",
drill: false
}, {
name: "Tshirt",
val: 40,
toolTip: "toolTip-Tshirt-40",
drill: true
}, {
name: "socks",
val: 30,
toolTip: "toolTip-socks-30",
drill: false
}, {
name: "watchs",
val: 20,
toolTip: "toolTip-watchs-20",
drill: false
}, {
name: "hats",
val: 10,
toolTip: "toolTip-hats-10",
drill: false
}]
}, {
category: "2014-3-2",
subCategory: [{
name: "shoe",
val: 16,
toolTip: "toolTip-shoe-16",
drill: false
}, {
name: "pant",
val: 12,
toolTip: "toolTip-pant-12",
drill: false
}, {
name: "shirt",
val: 14,
toolTip: "toolTip-shirt-14",
drill: false
}, {
name: "Tshirt",
val: 13,
toolTip: "toolTip-Tshirt-13",
drill: false
}, {
name: "socks",
val: 22,
toolTip: "toolTip-socks-22",
drill: true
}, {
name: "watchs",
val: 31,
toolTip: "toolTip-watchs-31",
drill: false
}, {
name: "hats",
val: 21,
toolTip: "toolTip-hats-21",
drill: false
}]
}, {
category: "2014-6-3",
subCategory: [{
name: "shoe",
val: 22,
toolTip: "toolTip-shoe-22",
drill: false
}, {
name: "pant",
val: 25,
toolTip: "toolTip-pant-25",
drill: false
}, {
name: "shirt",
val: 28,
toolTip: "toolTip-shirt-28",
drill: false
}, {
name: "Tshirt",
val: 33,
toolTip: "toolTip-Tshirt-33",
drill: false
}, {
name: "socks",
val: 25,
toolTip: "toolTip-socks-25",
drill: false
}, {
name: "watchs",
val: 40,
toolTip: "toolTip-watchs-40",
drill: false
}, {
name: "hats",
val: 38,
toolTip: "toolTip-hats-38",
drill: true
}]
}, {
category: "2014-9-3",
subCategory: [{
name: "shoe",
val: 25,
toolTip: "toolTip-shoe-25",
drill: false
}, {
name: "pant",
val: 33,
toolTip: "toolTip-pant-33",
drill: false
}, {
name: "shirt",
val: 37,
toolTip: "toolTip-shirt-37",
drill: false
}, {
name: "Tshirt",
val: 38,
toolTip: "toolTip-Tshirt-38",
drill: false
}, {
name: "socks",
val: 32,
toolTip: "toolTip-socks-32",
drill: false
}, {
name: "watchs",
val: 28,
toolTip: "toolTip-watchs-28",
drill: true
}, {
name: "hats",
val: 41,
toolTip: "toolTip-hats-41",
drill: false
}]
}, {
category: "2014-12-4",
subCategory: [{
name: "shoe",
val: 22,
toolTip: "toolTip-shoe-22",
drill: false
}, {
name: "pant",
val: 41,
toolTip: "toolTip-pant-41",
drill: false
}, {
name: "shirt",
val: 33,
toolTip: "toolTip-shirt-33",
drill: false
}, {
name: "Tshirt",
val: 22,
toolTip: "toolTip-Tshirt-22",
drill: false
}, {
name: "socks",
val: 11,
toolTip: "toolTip-socks-11",
drill: false
}, {
name: "watchs",
val: 39,
toolTip: "toolTip-watchs-39",
drill: false
}, {
name: "hats",
val: 32,
toolTip: "toolTip-hats-32",
drill: false
}]
}, {
category: "2015-3-5",
subCategory: [{
name: "shoe",
val: 33,
toolTip: "toolTip-shoe-33",
drill: false
}, {
name: "pant",
val: 51,
toolTip: "toolTip-pant-51",
drill: false
}, {
name: "shirt",
val: 43,
toolTip: "toolTip-shirt-43",
drill: false
}, {
name: "Tshirt",
val: 43,
toolTip: "toolTip-Tshirt-43",
drill: false
}, {
name: "socks",
val: 46,
toolTip: "toolTip-socks-46",
drill: false
}, {
name: "watchs",
val: 47,
toolTip: "toolTip-watchs-47",
drill: false
}, {
name: "hats",
val: 49,
toolTip: "toolTip-hats-49",
drill: false
}]
}];
我想把这个数组转换成下一个数组。
var newData = [{
"category": "2014-1-1",
"subCategory": [{
"name": "shoe",
"val": 70,
"toolTip": "toolTip-shoe-70",
"drill": false,
"parent": "2014-1-1",
"count": 70
}, {
"name": "pant",
"val": 60,
"toolTip": "toolTip-pant-60",
"drill": false,
"parent": "2014-1-1",
"count": 60
}, {
"name": "shirt",
"val": 50,
"toolTip": "toolTip-shirt-50",
"drill": false,
"parent": "2014-1-1",
"count": 50
}, {
"name": "Tshirt",
"val": 40,
"toolTip": "toolTip-Tshirt-40",
"drill": true,
"parent": "2014-1-1",
"count": 40
}, {
"name": "socks",
"val": 30,
"toolTip": "toolTip-socks-30",
"drill": false,
"parent": "2014-1-1",
"count": 30
}, {
"name": "watchs",
"val": 20,
"toolTip": "toolTip-watchs-20",
"drill": false,
"parent": "2014-1-1",
"count": 20
}, {
"name": "hats",
"val": 10,
"toolTip": "toolTip-hats-10",
"drill": false,
"parent": "2014-1-1",
"count": 10
}]
}, {
"category": "2014-3-2",
"subCategory": [{
"name": "shoe",
"val": 16,
"toolTip": "toolTip-shoe-16",
"drill": false,
"parent": "2014-3-2",
"count": 86
}, {
"name": "pant",
"val": 12,
"toolTip": "toolTip-pant-12",
"drill": false,
"parent": "2014-3-2",
"count": 72
}, {
"name": "shirt",
"val": 14,
"toolTip": "toolTip-shirt-14",
"drill": false,
"parent": "2014-3-2",
"count": 64
}, {
"name": "Tshirt",
"val": 13,
"toolTip": "toolTip-Tshirt-13",
"drill": false,
"parent": "2014-3-2",
"count": 53
}, {
"name": "socks",
"val": 22,
"toolTip": "toolTip-socks-22",
"drill": true,
"parent": "2014-3-2",
"count": 52
}, {
"name": "watchs",
"val": 31,
"toolTip": "toolTip-watchs-31",
"drill": false,
"parent": "2014-3-2",
"count": 51
}, {
"name": "hats",
"val": 21,
"toolTip": "toolTip-hats-21",
"drill": false,
"parent": "2014-3-2",
"count": 31
}]
}, {
"category": "2014-6-3",
"subCategory": [{
"name": "shoe",
"val": 22,
"toolTip": "toolTip-shoe-22",
"drill": false,
"parent": "2014-6-3",
"count": 108
}, {
"name": "pant",
"val": 25,
"toolTip": "toolTip-pant-25",
"drill": false,
"parent": "2014-6-3",
"count": 97
}, {
"name": "shirt",
"val": 28,
"toolTip": "toolTip-shirt-28",
"drill": false,
"parent": "2014-6-3",
"count": 92
}, {
"name": "Tshirt",
"val": 33,
"toolTip": "toolTip-Tshirt-33",
"drill": false,
"parent": "2014-6-3",
"count": 86
}, {
"name": "socks",
"val": 25,
"toolTip": "toolTip-socks-25",
"drill": false,
"parent": "2014-6-3",
"count": 77
}, {
"name": "watchs",
"val": 40,
"toolTip": "toolTip-watchs-40",
"drill": false,
"parent": "2014-6-3",
"count": 91
}, {
"name": "hats",
"val": 38,
"toolTip": "toolTip-hats-38",
"drill": true,
"parent": "2014-6-3",
"count": 69
}]
}, {
"category": "2014-9-3",
"subCategory": [{
"name": "shoe",
"val": 25,
"toolTip": "toolTip-shoe-25",
"drill": false,
"parent": "2014-9-3",
"count": 133
}, {
"name": "pant",
"val": 33,
"toolTip": "toolTip-pant-33",
"drill": false,
"parent": "2014-9-3",
"count": 130
}, {
"name": "shirt",
"val": 37,
"toolTip": "toolTip-shirt-37",
"drill": false,
"parent": "2014-9-3",
"count": 129
}, {
"name": "Tshirt",
"val": 38,
"toolTip": "toolTip-Tshirt-38",
"drill": false,
"parent": "2014-9-3",
"count": 124
}, {
"name": "socks",
"val": 32,
"toolTip": "toolTip-socks-32",
"drill": false,
"parent": "2014-9-3",
"count": 109
}, {
"name": "watchs",
"val": 28,
"toolTip": "toolTip-watchs-28",
"drill": true,
"parent": "2014-9-3",
"count": 119
}, {
"name": "hats",
"val": 41,
"toolTip": "toolTip-hats-41",
"drill": false,
"parent": "2014-9-3",
"count": 110
}]
}, {
"category": "2014-12-4",
"subCategory": [{
"name": "shoe",
"val": 22,
"toolTip": "toolTip-shoe-22",
"drill": false,
"parent": "2014-12-4",
"count": 155
}, {
"name": "pant",
"val": 41,
"toolTip": "toolTip-pant-41",
"drill": false,
"parent": "2014-12-4",
"count": 171
}, {
"name": "shirt",
"val": 33,
"toolTip": "toolTip-shirt-33",
"drill": false,
"parent": "2014-12-4",
"count": 162
}, {
"name": "Tshirt",
"val": 22,
"toolTip": "toolTip-Tshirt-22",
"drill": false,
"parent": "2014-12-4",
"count": 146
}, {
"name": "socks",
"val": 11,
"toolTip": "toolTip-socks-11",
"drill": false,
"parent": "2014-12-4",
"count": 120
}, {
"name": "watchs",
"val": 39,
"toolTip": "toolTip-watchs-39",
"drill": false,
"parent": "2014-12-4",
"count": 158
}, {
"name": "hats",
"val": 32,
"toolTip": "toolTip-hats-32",
"drill": false,
"parent": "2014-12-4",
"count": 142
}]
}, {
"category": "2015-3-5",
"subCategory": [{
"name": "shoe",
"val": 33,
"toolTip": "toolTip-shoe-33",
"drill": false,
"parent": "2015-3-5",
"count": 188
}, {
"name": "pant",
"val": 51,
"toolTip": "toolTip-pant-51",
"drill": false,
"parent": "2015-3-5",
"count": 222
}, {
"name": "shirt",
"val": 43,
"toolTip": "toolTip-shirt-43",
"drill": false,
"parent": "2015-3-5",
"count": 205
}, {
"name": "Tshirt",
"val": 43,
"toolTip": "toolTip-Tshirt-43",
"drill": false,
"parent": "2015-3-5",
"count": 189
}, {
"name": "socks",
"val": 46,
"toolTip": "toolTip-socks-46",
"drill": false,
"parent": "2015-3-5",
"count": 166
}, {
"name": "watchs",
"val": 47,
"toolTip": "toolTip-watchs-47",
"drill": false,
"parent": "2015-3-5",
"count": 228
}, {
"name": "hats",
"val": 49,
"toolTip": "toolTip-hats-49",
"drill": false,
"parent": "2015-3-5",
"count": 191
}]
}];
在新的数组中,subCategory
增加了两个属性,parent
和count
, Parent
的值是Category
的值,Count
的值是之前的subCategory val
的和。
到目前为止,我已经能够在subCategory
中添加parent
属性。我无法添加count
属性。
下面是JS代码
var data = [{
category: "2014-1-1",
subCategory: [{
name: "shoe",
val: 70,
toolTip: "toolTip-shoe-70",
drill: false
}, {
name: "pant",
val: 60,
toolTip: "toolTip-pant-60",
drill: false
}, {
name: "shirt",
val: 50,
toolTip: "toolTip-shirt-50",
drill: false
}, {
name: "Tshirt",
val: 40,
toolTip: "toolTip-Tshirt-40",
drill: true
}, {
name: "socks",
val: 30,
toolTip: "toolTip-socks-30",
drill: false
}, {
name: "watchs",
val: 20,
toolTip: "toolTip-watchs-20",
drill: false
}, {
name: "hats",
val: 10,
toolTip: "toolTip-hats-10",
drill: false
}]
}, {
category: "2014-3-2",
subCategory: [{
name: "shoe",
val: 16,
toolTip: "toolTip-shoe-16",
drill: false
}, {
name: "pant",
val: 12,
toolTip: "toolTip-pant-12",
drill: false
}, {
name: "shirt",
val: 14,
toolTip: "toolTip-shirt-14",
drill: false
}, {
name: "Tshirt",
val: 13,
toolTip: "toolTip-Tshirt-13",
drill: false
}, {
name: "socks",
val: 22,
toolTip: "toolTip-socks-22",
drill: true
}, {
name: "watchs",
val: 31,
toolTip: "toolTip-watchs-31",
drill: false
}, {
name: "hats",
val: 21,
toolTip: "toolTip-hats-21",
drill: false
}]
}, {
category: "2014-6-3",
subCategory: [{
name: "shoe",
val: 22,
toolTip: "toolTip-shoe-22",
drill: false
}, {
name: "pant",
val: 25,
toolTip: "toolTip-pant-25",
drill: false
}, {
name: "shirt",
val: 28,
toolTip: "toolTip-shirt-28",
drill: false
}, {
name: "Tshirt",
val: 33,
toolTip: "toolTip-Tshirt-33",
drill: false
}, {
name: "socks",
val: 25,
toolTip: "toolTip-socks-25",
drill: false
}, {
name: "watchs",
val: 40,
toolTip: "toolTip-watchs-40",
drill: false
}, {
name: "hats",
val: 38,
toolTip: "toolTip-hats-38",
drill: true
}]
}, {
category: "2014-9-3",
subCategory: [{
name: "shoe",
val: 25,
toolTip: "toolTip-shoe-25",
drill: false
}, {
name: "pant",
val: 33,
toolTip: "toolTip-pant-33",
drill: false
}, {
name: "shirt",
val: 37,
toolTip: "toolTip-shirt-37",
drill: false
}, {
name: "Tshirt",
val: 38,
toolTip: "toolTip-Tshirt-38",
drill: false
}, {
name: "socks",
val: 32,
toolTip: "toolTip-socks-32",
drill: false
}, {
name: "watchs",
val: 28,
toolTip: "toolTip-watchs-28",
drill: true
}, {
name: "hats",
val: 41,
toolTip: "toolTip-hats-41",
drill: false
}]
}, {
category: "2014-12-4",
subCategory: [{
name: "shoe",
val: 22,
toolTip: "toolTip-shoe-22",
drill: false
}, {
name: "pant",
val: 41,
toolTip: "toolTip-pant-41",
drill: false
}, {
name: "shirt",
val: 33,
toolTip: "toolTip-shirt-33",
drill: false
}, {
name: "Tshirt",
val: 22,
toolTip: "toolTip-Tshirt-22",
drill: false
}, {
name: "socks",
val: 11,
toolTip: "toolTip-socks-11",
drill: false
}, {
name: "watchs",
val: 39,
toolTip: "toolTip-watchs-39",
drill: false
}, {
name: "hats",
val: 32,
toolTip: "toolTip-hats-32",
drill: false
}]
}, {
category: "2015-3-5",
subCategory: [{
name: "shoe",
val: 33,
toolTip: "toolTip-shoe-33",
drill: false
}, {
name: "pant",
val: 51,
toolTip: "toolTip-pant-51",
drill: false
}, {
name: "shirt",
val: 43,
toolTip: "toolTip-shirt-43",
drill: false
}, {
name: "Tshirt",
val: 43,
toolTip: "toolTip-Tshirt-43",
drill: false
}, {
name: "socks",
val: 46,
toolTip: "toolTip-socks-46",
drill: false
}, {
name: "watchs",
val: 47,
toolTip: "toolTip-watchs-47",
drill: false
}, {
name: "hats",
val: 49,
toolTip: "toolTip-hats-49",
drill: false
}]
}];
function constructDataWithSum(userData) {
debugger
var arr = [];
var distinctSubCategories = [];
for (var i = 0; i < userData.length; i++) {
for (var j = 0; j < userData[i].subCategory.length; j++) {
//userData[i].subCategory[j].count = previousValue;
userData[i].subCategory[j].parent = userData[i].category;
if (customIndexOf(distinctSubCategories, userData[i].subCategory[j].name) == -1) {
distinctSubCategories.push(userData[i].subCategory[j].name);
}
}
}
}
function customIndexOf(dataArray, key) {
var index = -1;
for (var i = 0; i < dataArray.length; i++) {
if (dataArray[i] == key) {
index = i;
break;
}
}
return index;
}
constructDataWithSum(data);
console.log(JSON.stringify(data));
Fiddle Link
您可以使用像
这样的键/值对象来保存每个子类别的值之和。function constructDataWithSum(userData) {
var sum = {};
for (var i = 0; i < userData.length; i++) {
for (var j = 0; j < userData[i].subCategory.length; j++) {
//userData[i].subCategory[j].count = previousValue;
userData[i].subCategory[j].parent = userData[i].category;
sum[userData[i].subCategory[j].name] = (sum[userData[i].subCategory[j].name]||0) + userData[i].subCategory[j].val;
userData[i].subCategory[j].count = sum[userData[i].subCategory[j].name];
}
}
}
演示:小提琴
由于要循环遍历子类别,因此可以通过重置每个类别的计数器previousValue
来保持计数,如下所示:
for (var i = 0; i < userData.length; i++) {
var previousValue = 0;
for (var j = 0; j < userData[i].subCategory.length; j++) {
previousValue += userData[i].subCategory[j].val;
userData[i].subCategory[j].count = previousValue;
...
}
}
此处更新小提琴
相关文章:
- 如何通过箭头键连续/平滑地移动元素
- 比较数组中的连续元素不会返回任何结果(javascript)
- 如何在不丢失格式的情况下连续淡入() 元素文本的每个字符,包括嵌套元素
- 第一个元素和最后一个元素之间的连续循环
- 如何为动画持续时间较短的元素制作连续动画's[GASP]
- 如何完成缺少(连续)元素的数组|Javascript
- 多个元素上的连续背景图像图案
- 更优雅/高效的方式来连续获取 6 个连续的先前 DOM 元素
- 如何为角度中的连续ng个重复元素提供连续索引
- JQuery获取一个连续的元素序列
- 以连续的方式执行循环中的所有元素
- 如何从Javascript数组中选择非连续元素
- 使用jQuery连续移动元素
- 使用jquery,当元素不是按连续顺序排列时,如何返回具有下一个连续ID的元素?
- 使用jquery交换非连续元素
- 如何向音频元素添加侦听器以实现连续播放
- 数组连续元素的总和
- D3.js删除两个元素匹配属性时,连续单击
- 识别和量化数组中连续循环的元素
- 使用Javascript将连续的元素分组在一起