js数据分组
方法一: /** * @description 数据分组 * @author CaoZM20132014 * @date 2019-07-19 * @export * @param { array } array 需要进行分组的数据 * @param { string } key 进行分组时依据的键名 * @param { string } resKey 分组后数据的键名,默认为 list * @returns { array } 一维数组形式 */ function dataGroupingToArray(array, key, resKey = "list") { if (!key) return array; var aMap = []; var aResult = []; for (var i = 0; i < array.length; i++) { var item = array[i]; if (aMap.indexOf(item[key]) === -1) { var oItem = {}; oItem[resKey] = [item]; oItem[key] = item[key]; aResult.push(oItem); aMap.push(item[key]); } else { var index = aMap.indexOf(item[key]); aResult[index][resKey].push(item); } } return aResult; }
方法二: /** * @description 数据分组 * @author CaoZM20132014 * @date 2019-07-19 * @export * @param { array } array 需要进行分组的数据 * @param { string } key 进行分组时依据的键名 * @returns { array } 二维数组形式 */ function dataGroupingToDeepArray(array, key) { if (!key) return array; var aMap = []; var aResult = []; for (var i = 0; i < array.length; i++) { var item = array[i]; if (aMap.indexOf(item[key]) === -1) { aResult.push([item]); aMap.push(item[key]); } else { var index = aMap.indexOf(item[key]); aResult[index].push(item); } } return aResult;
方法三: /** * @description 数据分组 * @author CaoZM20132014 * @date 2019-07-19 * @export * @param { array } array 需要进行分组的数据 * @param { string } key 进行分组时依据的键名 * @returns { object } 键值对形式 */ function dataGroupingToJson(array, key) { if (!key) return array; var aMap = []; var oResult = {}; for (var i = 0; i < array.length; i++) { var item = array[i]; if (aMap.indexOf(item[key]) === -1) { oResult[item[key]] = [item]; aMap.push(item[key]); } else { oResult[item[key]].push(item); } } return oResult; }
方法四: /** * @description 数据分组 * @author CaoZM20132014 * @date 2019-07-23 * @export * @example dataGroupByKey(array, item => item.id) * @param { array } array * @param { function } fn * @returns { array } */ function dataGroupByKey(array, fn) { if (typeof fn !== "function") return array; var groups = {}; var array = array || []; for (var i = 0; i < array.length; i++) { var item = array[i]; var group = JSON.stringify(fn(item)); groups[group] = groups[group] || []; groups[group].push(item); }; return Object.keys(groups).map(group => groups[group]); }
方法五: /** * @description 数据分组 * @author CaoZM20132014 * @date 2019-07-22 * @export groupByKeys() * @example dataGroupByKeys(res.data, ["id", "name"]) * @param { array } array * @param { array } keys * @returns { array } 键值对形式 */ function dataGroupByKeys(array, keys) { if (!keys) return array; var list = array || []; var groups = []; for (var i = 0; i < list.length; i++) { var item = list[i]; var key = {}; for (var j = 0; j < keys.length; j++) { var k = keys[j]; key[k] = item[k]; } var group = groups.find(ele => { return ele._key === JSON.stringify(key); }); if (!group) { group = { _key: JSON.stringify(key), key: key, }; groups.push(group); } group.data = group.data || []; group.data.push(item); }; return groups; }
测试: var test = [ { "name":"张三", "createDate":"2019-08-06", "task": "任务未完成" }, { "name":"张三", "createDate":"2019-08-06", "task": "任务已完成" }, { "name":"张三", "createDate":"2019-08-07", "task": "任务已完成" }, { "name":"李四", "createDate":"2019-08-06", "task": "任务未完成" }, { "name":"李四", "createDate":"2019-08-07", "task": "任务未完成" }, { "name":"李四", "createDate":"2019-08-07", "task": "任务已完成" } ]
结果如下: dataGroupingToArray(test, "name"); dataGroupingToDeepArray(test, "name"); dataGroupingToJson(test, "createDate"); dataGroupByKey(test, item => item.createDate); dataGroupByKeys(test, ["name", "createDate"]); ———————————————— 版权声明:本文为CSDN博主「随遇而安、1314」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/LonewoIf/article/details/98732966