API接口获得数据后处理JS数组(包含字符串对象)分组、过滤和筛选的解决方案

读取API后,数组多是以字符串对象的形态存在于数组中的。根据实际情况,需要对得到的数据进行分组、过滤和筛选。

如下,通过api获取以下格式数组,可以理解为从mysql数据库读取的二维数组:

    var arr = [
        {area_name: "A街道", health_id: "1", health_must: "1693", health_today: "8", checked: "1"},
        {area_name: "B镇", health_id: "2", health_must: "1771", health_today: "2", checked: "1"},
        {area_name: "C镇", health_id: "3", health_must: "1456", health_today: "0", checked: "1"},
        {area_name: "D镇", health_id: "4", health_must: "1458", health_today: "65", checked: "1"},
        {area_name: "E街道", health_id: "5", health_must: "1544", health_today: "2", checked: "1"},
        {area_name: "F街道", health_id: "6", health_must: "1597", health_today: "401", checked: "1"},
        {area_name: "H街道", health_id: "2", health_must: "1481", health_today: "7", checked: "1"},
        {area_name: "I镇", health_id: "6", health_must: "1315", health_today: "2", checked: "1"},
        {area_name: "J镇", health_id: "4", health_must: "1660", health_today: "2", checked: "0"},
        {area_name: "K街道", health_id: "4", health_must: "2240", health_today: "8", checked: "0"},
        {area_name: "L镇", health_id: "3", health_must: "1511", health_today: "8", checked: "0"},
        {area_name: "M街道", health_id: "1", health_must: "1840", health_today: "2", checked: "0"},
        {area_name: "N街道", health_id: "1", health_must: "1738", health_today: "347", checked: "0"},
        {area_name: "P街道", health_id: "1", health_must: "1512", health_today: "2", checked: "0"}
    ];

根据项目需求,我们需要提供以下数据处理结果:
1、获取health_id为指定的数据,如:health_id=1的数据数组;
2、获取多个health_id为指定的数据,如health_id=1,health_id=3,health_id=4……的数据分组数据;
3、获取health_id且(或)checked同时满足的逻辑条件数据,如health_id=1且checked=0;

这些在SQL语句中都有固定的语法,直接调用即可,那么如何在数组中实现以上的需求呢?

解决方案如下:
1.单条件单数据筛选:

    /*1.单条件单数据筛选
     *filte数组过滤,指定对象字段的的筛选方式
     * arr,包含对象的数组;
     * health_id,对象数组对应的键;
     */

    function filterByName(arr, health_id) {
        return arr.filter(item => item.health_id == health_id);
    }
    //获取health_id=4的数组数据;
    var a = filterByName(arr, "4");
    console.log(a);

返回结果:
在这里插入图片描述

2.单条件多数据筛选后并自动分组

    /*2.单条件单数据筛选后,并自动分组
     *filte数组过滤,指定对象字段的的筛选方式
     * arr,包含对象的数组;
     * health_id,对象数组对应的键;
     */

    function filterByPolyName(arr, nameArr) {
        var result=[];
        for(var i = 0; i < nameArr.length; i++) {
            result.push(arr.filter(item => item.health_id === nameArr[i]));
        }
        return result;

    }
    //获取health_id=1和3的数组数据;
    var b = filterByPolyName(arr,['1','3']);
    console.log(b);

返回结果:
在这里插入图片描述

3、逻辑条件筛选

    /*3.逻辑条件筛选,多条件多数据筛选
     *filte数组过滤,指定对象字段的的筛选方式
     * arr,包含对象的数组;
     * health_id,对象数组对应的键;
     * 根据id且checked筛选;
     */
    function filterByName2(aim, health_id, checked) {
        return aim.filter(item => item.health_id === health_id && item.checked === checked);
    }
    //health_id=1且checked=0筛选
    var c = filterByName2(arr,"1","0");
    console.log(c);

返回结果:
在这里插入图片描述

Done!

发布了105 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41290949/article/details/104314446