如何使用jQuery在循环内对项目进行分组?
解决方案:将二维数组按首元素分组为对象
你可以使用reduce方法(或者在循环中直接处理)来实现分组,这比多次过滤更高效,代码逻辑也更简洁:
方法一:先收集所有项再用reduce处理
如果能先把循环中得到的所有项收集到一个数组里,用reduce一次性处理:
// 假设循环得到的所有项已存入items数组 const items = [ ['ab', 'sd'], ['ab', 'dc'], ['ab', 'ca'], ['bc', 'ds'], ['bc', 'ea'] ]; const groupedObj = items.reduce((acc, [key, value]) => { // 若当前键未在累加器中,初始化空数组 acc[key] = acc[key] || []; // 将值推入对应数组 acc[key].push(value); return acc; }, {}); console.log(groupedObj); // 输出:{ ab: ['sd', 'dc', 'ca'], bc: ['ds', 'ea'] }
方法二:循环中实时处理
如果只能在每次循环迭代时处理单个项,直接维护结果对象即可:
// 初始化空结果对象 const groupedObj = {}; // 模拟你的循环过程 const loopItems = [['ab', 'sd'], ['ab', 'dc'], ['ab', 'ca'], ['bc', 'ds'], ['bc', 'ea']]; for (const [key, value] of loopItems) { // 键不存在则创建空数组 if (!groupedObj[key]) { groupedObj[key] = []; } groupedObj[key].push(value); } console.log(groupedObj); // 输出同上
核心逻辑是:每次拿到键值对后,检查结果对象中是否存在该键,不存在则初始化对应的空数组,再将当前值推入数组。这种方式只需要遍历一次所有项,比反复过滤相同键的元素效率更高。
内容的提问来源于stack exchange,提问作者Methababu
相关产品推荐
相关产品推荐

