JSON转数组后,筛选分组并输出,判断键值是否存在补0
1.有四项项目,数组为:var projectData = ['60米', '3000米', '负重', '100米'];
2.有四名队员,数组为:var NameData = ['张三', '李四', '王五', '马六'];
3.在实际过程中,队员因故可能没有及时参加对应的项目,成绩暂时记为0;
4.但是,从API后台获取实际数据,格式如何;因为没有比赛记录,数据库中没有对应的记录。
var arr = [
{"category_name": "60米", "member_name": "张三", "value": "90"},
{"category_name": "60米", "member_name": "李四", "value": "80"},
{"category_name": "3000米", "member_name": "张三", "value": "46"},
{"category_name": "负重", "member_name": "王五", "value": "23"},
{"category_name": "负重", "member_name": "马六", "value": "85"},
{"category_name": "100米", "member_name": "张三", "value": "79"}
];
5.如何将运动员没有参加比赛的数据,通过前端自动补充,默认为0.
let NameData = ['张三', '李四', '王五', '马六'];
let projectData = ['60米', '3000米', '负重', '100米'];
let data = [];
for (let i = 0; i < NameData.length; i++) {
for (let j = 0; j < projectData.length; j++) {
data.push({category_name: projectData[j], member_name: NameData[i], value: 0})
}
}
console.log(data);
[
{
"category_name": "60米",
"member_name": "张三",
"value": 0
},
{
"category_name": "3000米",
"member_name": "张三",
"value": 0
},
{
"category_name": "负重",
"member_name": "张三",
"value": 0
},
{
"category_name": "100米",
"member_name": "张三",
"value": 0
},
{
"category_name": "60米",
"member_name": "李四",
"value": 0
},
{
"category_name": "3000米",
"member_name": "李四",
"value": 0
},
{
"category_name": "负重",
"member_name": "李四",
"value": 0
},
{
"category_name": "100米",
"member_name": "李四",
"value": 0
},
{
"category_name": "60米",
"member_name": "王五",
"value": 0
},
{
"category_name": "3000米",
"member_name": "王五",
"value": 0
},
{
"category_name": "负重",
"member_name": "王五",
"value": 0
},
{
"category_name": "100米",
"member_name": "王五",
"value": 0
},
{
"category_name": "60米",
"member_name": "马六",
"value": 0
},
{
"category_name": "3000米",
"member_name": "马六",
"value": 0
},
{
"category_name": "负重",
"member_name": "马六",
"value": 0
},
{
"category_name": "100米",
"member_name": "马六",
"value": 0
}
]
// 创建一个新的空对象来存储结果
var result = {};
// 遍历 arr1 和 arr2
[...arr, ...data].forEach(item => {
// 获取 category_name 和 member_name 作为键
var key = item.category_name + '_' + item.member_name;
// 如果键在结果对象中已存在,则将 value 相加
// 如果键不存在,则创建一个新的键并设置 value
if (result[key]) {
result[key].value = Number(result[key].value) + Number(item.value);
} else {
result[key] = item;
}
});
// 将结果对象转换为数组
var resultArray = Object.values(result);
console.log(resultArray);
[
{
"category_name": "60米",
"member_name": "张三",
"value": 90
},
{
"category_name": "60米",
"member_name": "李四",
"value": 80
},
{
"category_name": "3000米",
"member_name": "张三",
"value": 46
},
{
"category_name": "负重",
"member_name": "王五",
"value": 23
},
{
"category_name": "负重",
"member_name": "马六",
"value": 85
},
{
"category_name": "100米",
"member_name": "张三",
"value": 79
},
{
"category_name": "负重",
"member_name": "张三",
"value": 0
},
{
"category_name": "3000米",
"member_name": "李四",
"value": 0
},
{
"category_name": "负重",
"member_name": "李四",
"value": 0
},
{
"category_name": "100米",
"member_name": "李四",
"value": 0
},
{
"category_name": "60米",
"member_name": "王五",
"value": 0
},
{
"category_name": "3000米",
"member_name": "王五",
"value": 0
},
{
"category_name": "100米",
"member_name": "王五",
"value": 0
},
{
"category_name": "60米",
"member_name": "马六",
"value": 0
},
{
"category_name": "3000米",
"member_name": "马六",
"value": 0
},
{
"category_name": "100米",
"member_name": "马六",
"value": 0
}
]
在JavaScript中,有多种方法可以合并(或连接)两个或多个数组。以下是一些最常见的方法:
1. 使用 `concat()` 方法:
```javascript
let array1 = [1, 2, 3];
let array2 = [4, 5, 6];
let combinedArray = array1.concat(array2);
console.log(combinedArray); // 输出:[1, 2, 3, 4, 5, 6]
...
):let array1 = [1, 2, 3];
let array2 = [4, 5, 6];
let combinedArray = [...array1, ...array2];
console.log(combinedArray); // 输出:[1, 2, 3, 4, 5, 6]
push.apply()
方法:let array1 = [1, 2, 3];
let array2 = [4, 5, 6];
Array.prototype.push.apply(array1, array2);
console.log(array1); // 输出:[1, 2, 3, 4, 5, 6]
Array.prototype.flat()
方法:如果有一个数组的数组(即嵌套数组),使用 flat()
方法来扁平化数组并合并它们:
let arrays = [[1, 2, 3], [4, 5, 6]];
let combinedArray = arrays.flat();
console.log(combinedArray); // 输出:[1, 2, 3, 4, 5, 6]
注意:flat()
方法默认只会扁平化一层,如果有多层嵌套的数组,可以传递一个参数给 flat()
来指定扁平化的深度。例如,arrays.flat(2)
会扁平化两层的嵌套数组。
---
@漏刻有时