在代码之美中提到了这个问题,经常遇到嵌套数组的情况即多维数组情况,有时并关心嵌套结构,而只关心里面的数据处理,那么一般的自己写对应的for循环来拆除对应的嵌套数组,如果同书中所说编写通用的 Iterator 迭代器,则可不必对不同的嵌套循环编写不同的for循环,只需同的操作即可,还可方便的处理维slice情况,对每一维都可控制到底要处理哪些数据:
例子:
处理二维数组:
1 2 3 4
5 6 7 8
9 x y z
中的
2 3
6 7
数据
手工for循环处理
for(var i=0;i<2;i++){ for(var j=1;j<3;j++) { //TODO : process(xx); } }
采用迭代器
var matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 'x', 'y', 'z'] ]; var dimRange = [ //第一维 0-1循环 { start: 0, end: 1 }, //第二维 1-2 循环 { start: 1, end: 2 } ]; var iter = new matrixIter(dimRange, matrix); var item; var re = []; while (item = iter.next()) { //TODO: process(xx) }
可见采用迭代器后,代码更加简洁,以及更好掉头,只需更改 dimRange 配置,省去了大段修改 for 的麻烦,赞