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

  

posted @ 2022-08-07 22:27  chinadba  阅读(33)  评论(0编辑  收藏  举报