当使用数组时,有规律地需要中间表示 - 特别是在与功能的编程连接,其中数据常常被视为不可变:如何在执行数组迭代时避免中间结果?
const square = x => x * x;
const odd = x => (x & 1) === 1;
let xs = [1,2,3,4,5,6,7,8,9];
// unnecessary intermediate array:
xs.map(square).filter(odd); // [1,4,9,16,25,36,49,64,81] => [1,9,25,49,81]
// even worse:
xs.map(square).filter(odd).slice(0, 2); // [1,9]
如何避免在Javascript /的EcmaScript 2015此行为,以获得更高效的迭代算法?
你看过发电机吗? – deceze
@deceze我对于生成器有一点经验,但是和迭代器一样,它们似乎是一个可能的解决方案。你有代码示例吗? – rand
我没有超越MDN的例子等,你可以谷歌自己。一般情况下,发电机允许您设置链条,只有在请求时才会生成/返回下一个项目。迭代生成器迭代发生器的生成器可以“懒惰”地产生你需要的结果。 – deceze