话不多说,直接上代码吧!
//你的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'))
输出结果:
//最后是getNewArr方法,此方法结合前两个方法,返回一个经过分组后的数组
//要传入的参数依次为 getNoRepeatArray方法的返回值 也就是“条件数组”,需要分类的数组,分类条件的key
function getNewArr(arr, jsonArr, fieldName) {
let newArr = [];
arr.forEach(item=>{newArr.push(this.getmaparrList(jsonArr,fieldName,item))})
return newArr;
};
我表达的可能比较抽象,不清楚的话直接把代码拷走打断点看吧,一看就啥都明白了,这方法还是蛮实用的,getmaparrList方法单独拿出来用都是可以的