从M个元素选择N的js代码解析(combine)

来源:4-4 创建接口模块(上)

杨勤_cd

2019-02-28

第一次接触combine这块代码的时候发现难以理解,但是当我使用一些简单的例子去运行时,可以反推出这部分代码逻辑,个人觉得是有助于理解的,这里分享出来,如有不对的地方,欢迎指正:

分析combine([1,2,3],2)的执行过程:

步骤1:先判断size和length的大小关系,这里从3个里面选择2个元素,够取,故不会返回空[]

步骤2:执行函数f([1,2,3],2,[]),进入for循环,i=0时,newResult=[];向newResult中添加arr[0]后newResult变为[1],但是此时是要选择两个元素(size=2),所以执行else分支

步骤3:已经取好了1个数:[1],现在要取第二个数,应该从[2,3](newArr.splice(0,i+1))中选择一个数(即f([2,3],1,[1]))

总结:整个过程就是,从[1,2,3]中取一个元素有三种情况=>从剩下的素组中取一个元素=>得到每种结果

[1]=>[2,3]取1个元素=>执行for中的if分支,结果中push两个元素,[1,2][1,3]

[2]=>[3]取1个元素=>执行for中的if分支,结果中push1个元素, [2,3]

[3]=>[]取1个元素=>length=0,不执行for循环

最后得到结果[[1,2],[1,3],[2,3]]

代码细节注释:按照自己理解和老师写的部分不一样

http://img.mukewang.com/szimg/5c76b79f000110ec11370563.jpg

运行结果:符合预期

http://img.mukewang.com/szimg/5c76b9550001375f05760176.jpg


写回答

2回答

快乐动起来呀

2019-02-28

赞,非常用心,感谢与大家分享

1
1
杨勤_cd
非常感谢!
2019-11-04
共1条回复

23届毕业生

2019-06-12

优秀优秀,请允许我叫一声大师兄

1
0

ES6零基础教学 解析彩票项目

ES6从零开始,量身设计的迷你案例,让你全面掌握ES6

2579 学习 · 881 问题

查看课程