如何获取数组中指定子数组后的下一个元素(优先Lodash实现)
Lodash 实现方案
你原有硬编码切片长度的写法维护性较差,下面是几个更优雅、语义更清晰的实现,优先适配你需要的Lodash使用场景:
语义最直观的头部取数方案
用_.take替代手动写_.slice的起止索引,方法本身的语义就是「从数组头部截取指定长度的元素」,不需要额外注释就能读懂逻辑,也不需要硬编码固定长度值:const main_array = ["a", "b", "c", "d", "e", "f"]; const sub_array = ["a", "b", "c"]; const result = _.take(main_array, sub_array.length + 1); // 运行结果:["a", "b", "c", "d"]这个写法会自动跟随子数组的长度变化调整截取长度,不需要手动修改参数。
性能最优的极简写法(前置确认子数组合法可用)
如果你能100%确认子数组是主数组开头的连续片段、且子数组后方还有元素,甚至不需要做切片操作,直接拼接目标元素即可:const result = _.concat(sub_array, main_array[sub_array.length]);这个写法逻辑最直白:子数组本身就是结果的前半段,只需要把主数组里紧邻的下一个元素拼到子数组末尾即可,运行开销最低。
适配子数组任意位置的通用方案
如果子数组不一定出现在主数组的头部,需要先定位子数组的匹配位置再做截取,鲁棒性更强:// 定位子数组在主数组中的连续匹配起始索引 const matchStart = _.findIndex(main_array, (_, idx) => { return _.isEqual(_.slice(main_array, idx, idx + sub_array.length), sub_array); }); // 匹配成功则截取匹配段+后方紧邻的1个元素,匹配失败返回空数组 const result = matchStart > -1 ? _.slice(main_array, matchStart, matchStart + sub_array.length + 1) : [];
不建议继续使用
_.slice(main_array, 0, 4)这类硬编码固定数值的写法,一旦子数组的元素数量发生变化,你需要同步修改硬编码的切片长度参数,很容易出现漏改导致的bug。
内容的提问来源于stack exchange,提问作者sharingiscaring
相关产品推荐
相关产品推荐

