使用ES6 generator 实现链式API + lazy evaluation的数组迭代
发布于 10 年前 作者 jzlxiaohei 4527 次浏览 最后一次编辑是 8 年前

借助ES6 generator,写了一个小型迭代数组的库,可以像下面这样使用

//取1到10中的偶数,然后取这些偶数的平方
var _1to10 = [1,2,3,4,5,6,7,8,9,10];
var arr =iter(_1to10)
        .where(function(v){return v%2==0})
        .map(function(v){return v*v})
        .toArray();
console.log(arr); // [4, 16, 36, 64, 100]


//对年龄大于20的人,按年龄进行排序
var person = [{first:'god',last:'pig',age:25,male:'m'},
            {first:'wang',last:'er',age:26,male:'m'},
            {first:'zhang',last:'san',age:18,male:'m'},
            {first:'li',last:'si',age:19,male:'m'},
            {first:'god',last:'pig',age:21,male:'m'},
            {first:'god',last:'cat',age:22,male:'m'}];
var arr= iter(person)
            .where(function(v){return v.age>20})
            .sort(function(v1,v2){return v1.age-v2.age})
            .toArray();
//arr:[{..age:21..} , ... , {..age:26}...] 

我个人觉得这种用法很有吸引力,特别是加上lambda表达式后。https://github.com/jzlxiaohei/yield-iter上有更多demo,请大家拍砖

回到顶部