从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]]
代码细节注释:按照自己理解和老师写的部分不一样
运行结果:符合预期
写回答
2回答
-
赞,非常用心,感谢与大家分享
112019-11-04 -
23届毕业生
2019-06-12
优秀优秀,请允许我叫一声大师兄
10