javascript实现数组的按属性分组,for循环实现

/**
 * 数据分组 for循环实现
 * @param {*} arr数据源
 * @param {*} getKey 分组条件,可以为指定的key 也可以为获取当前key的函数体
 */
function groupBy(arr, getKey) {
	// 如果传入的是一个字符串  则转为输出该字符串的函数体。
	if (typeof getKey === 'string') {
		const key = getKey;
		getKey = (item) => item[key];
	}
	const result = {};
	for (let i = 0; i < arr.length; i++) {
         // 为当前元素 arr[i] 生成一个分组键 
		const key = getKey(arr[i]);
        // 检查 result 对象中是否已经存在以 key 为键的属性
		if (result[key]) {
            // 如果存在,则将当前元素添加到该键对应的数组中
			result[key].push(arr[i])
		} else {
        // 如果不存在,则创建一个新数组,将当前元素作为该数组的唯一元素,并将该数组添加到 result         对象中
			result[key] = [arr[i]]
		}
	}
	return result
}

//示例:1
let arr = [{name: 'Alice', age: 30}, {name: 'Bob', age: 25}, {name: 'Alice', age: 22}];
const result1 = groupBy(arr, 'name') 
//输出结果
// {  
//     Alice: [{name: 'Alice', age: 30}, {name: 'Alice', age: 22}],  
//     Bob: [{name: 'Bob', age: 25}]  
// }


//示例:2
let list=[{name: 'Alice', age: 30}, {name: 'Bob', age: 25}, {name: 'Alice', age: 22},{name: 'Tom', age: 22}]
const result2 = groupBy(list, (item)=>item.age) 
//输出结果

// {  
//     "30": [{name: 'Alice', age: 30}], "25": [{name: 'Bob', age: 25}],"22":[{name: 'Alice', age: 22},{name: 'Tom', age: 22}]     
// }

更多方法请前往此文章js数组分组,javascript实现数组的按属性分组_js 数组分组-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值