根据JSON数组的属性对数组进行分类

152 阅读2分钟

话不多说,直接上代码吧!

    //你的JSON数组,根据group为条件进行分组
    let arr = [
        {id:'1',name:'参数1',group:'a'},
        {id:'2',name:'参数2',group:'b'},
        {id:'3',name:'参数3',group:'b'},
        {id:'4',name:'参数4',group:'c'},
    ]
    
    //声明变量接收参数
    let param = getNewArr(this.getNoRepeatArray(arr,'group'),arr,'group')
    
    //方法
    function getNoRepeatArray(jsonArr, fieldName){
        let newArr = [];
        jsonArr.forEach(item=>{
        if(newArr.indexOf(item[fieldName])==-1) {
            newArr.push(item[fieldName])
        }
        })
        return newArr;
    };

    function getNewArr(arr, jsonArr, fieldName) {
        let newArr = [];
        arr.forEach(item=>{newArr.push(this.getmaparrList(jsonArr,fieldName,item))})
        return newArr;
    };

    function getmaparrList(arrlist, vname, value, flag = true) {
        return arrlist.filter((item) => flag ? (item[vname] == value) : (item[vname] !=value));
    };
    
    
你可以直接拷走方法,把数组换成你自己的就可以了
如果想知道方法具体是什么意思,请继续往下看↓↓↓
    //首先是getmaparrList,此方法可以根据key value来筛选数组中符合条件的值
    //要传入的参数从左到右依次为 JSON数组,key,value
    //flag不传的话默认是true,为true时 筛选符合条件的数据,为false时 筛选不符合条件的数据,返回结果为数组
    function getmaparrList(arrlist, vname, value, flag = true) {
        return arrlist.filter((item) => flag ? (item[vname] == value) : (item[vname] !=value));
    };

    //其次是getNoRepeatArray,此方法会将数组中的所有条件筛选出来,并且以数组的形式返回
    //说的可能比较抽象,直接看返回结果也许你会比较清楚我在说些什么
    //让我们新建一个数组,然后实际调用一下这个方法看看输出了什么吧
    let arr = [
        {id:'1',name:'参数1',group:'a'},
        {id:'2',name:'参数2',group:'b'},
        {id:'3',name:'参数3',group:'b'},
        {id:'4',name:'参数4',group:'c'},
    ]
    
    function getNoRepeatArray(jsonArr, fieldName){
        let newArr = [];
        jsonArr.forEach(item=>{
        if(newArr.indexOf(item[fieldName])==-1) {
            newArr.push(item[fieldName])
        }
        })
        return newArr;
    };
    
    console.log(getNoRepeatArray(arr,'group'))

输出结果:

image.png

    //最后是getNewArr方法,此方法结合前两个方法,返回一个经过分组后的数组
    //要传入的参数依次为 getNoRepeatArray方法的返回值 也就是“条件数组”,需要分类的数组,分类条件的key
    function getNewArr(arr, jsonArr, fieldName) {
        let newArr = [];
        arr.forEach(item=>{newArr.push(this.getmaparrList(jsonArr,fieldName,item))})
        return newArr;
    };

我表达的可能比较抽象,不清楚的话直接把代码拷走打断点看吧,一看就啥都明白了,这方法还是蛮实用的,getmaparrList方法单独拿出来用都是可以的