如何按长度升序遍历多个不同长度的列表?求简便实现方案
简便实现按列表长度升序遍历的方案
当然有更省心的实现方式啦!不用再手动逐个编写forEach并调整顺序,我们可以通过整合列表与处理逻辑+自动排序的方式来实现,具体分两种场景:
场景1:每个列表的处理逻辑不同
如果每个list_x.forEach(...)里的回调函数逻辑不一样,我们可以把列表和对应的处理函数配对,再按列表长度排序后执行:
// 1. 把所有列表和对应的处理函数配对存储 const listHandlerPairs = [ { list: list_6, handler: (item) => { /* 这里写list_6的处理逻辑 */ } }, { list: list_3, handler: (item) => { /* 这里写list_3的处理逻辑 */ } }, { list: list_2, handler: (item) => { /* 这里写list_2的处理逻辑 */ } }, { list: list_4, handler: (item) => { /* 这里写list_4的处理逻辑 */ } }, { list: list_5, handler: (item) => { /* 这里写list_5的处理逻辑 */ } }, { list: list_1, handler: (item) => { /* 这里写list_1的处理逻辑 */ } }, ]; // 2. 按列表长度升序排序 listHandlerPairs.sort((a, b) => a.list.length - b.list.length); // 3. 依次遍历每个列表并执行对应处理逻辑 listHandlerPairs.forEach(({ list, handler }) => { list.forEach(handler); });
这样一来,哪怕后续列表的长度变化或者新增/删除列表,都不需要手动调整遍历顺序,排序逻辑会自动帮你处理。
场景2:所有列表的处理逻辑相同
如果所有列表的forEach回调逻辑是一致的,那就更简单了:
// 1. 收集所有列表到一个数组中 const allLists = [list_1, list_2, list_3, list_4, list_5, list_6]; // 2. 按列表长度升序排序 allLists.sort((a, b) => a.length - b.length); // 3. 统一遍历处理 allLists.forEach(list => { list.forEach(item => { /* 这里写所有列表共用的处理逻辑 */ }); });
这种方式代码更简洁,适合处理逻辑统一的场景。
内容的提问来源于stack exchange,提问作者Quentin
相关产品推荐
相关产品推荐

