算法回顾

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.

核算算法

1.模拟数据

    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);

2.模拟结果

[
    {
        "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
    }
]

3.合并计算

// 创建一个新的空对象来存储结果
    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);

4.输出所需

[
    {
        "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数据合并的方法汇总

在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]
  1. 使用扩展运算符 (...):
let array1 = [1, 2, 3];
let array2 = [4, 5, 6];
let combinedArray = [...array1, ...array2];
console.log(combinedArray); // 输出:[1, 2, 3, 4, 5, 6]
  1. 使用 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]
  1. 使用 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) 会扁平化两层的嵌套数组。


---
@漏刻有时
10-05 12:00