一些简单的东西,被引用和拷贝坑了下。
function *ngrams(sequence, n) {
let g = (function *(sequence){yield *sequence})(sequence);
let history = [];
while (n > 1) {
history.push(g.next().value);
n--;
}
for (let item of g) {
history.push(item);
// look at here.
// yield Array.from(history);
yield history;
history.shift();
}
}
如果这时候用Array.from。。。WTF,什么鬼
> Array.from(ngrams([1,2,3,4,5], 3));
[ [ 4, 5 ], [ 4, 5 ], [ 4, 5 ] ]
如果for of
> for (let w of ngrams([1,2,3,4,5], 3)){console.log(w);}
[ 1, 2, 3 ]
[ 2, 3, 4 ]
[ 3, 4, 5 ]
很怀疑Array.from干啥了。。。
> Array.from(ngrams([1,2,3,4,5], 3), (v)=>{console.log(v)});
[ 1, 2, 3 ]
[ 2, 3, 4 ]
[ 3, 4, 5 ]
> Array.from(ngrams([1,2,3,4,5], 3), (v)=>v);
[ [ 4, 5 ], [ 4, 5 ], [ 4, 5 ] ]
> Array.from(ngrams([1,2,3,4,5], 3), (v)=>v+1);
[ '1,2,31', '2,3,41', '3,4,51' ]
这就明晰了,没想到会在js中碰到这种问题。。。
中午见有人讨论求一个数组最小值时这样:
Math.min.apply(Object.create(null), [1,2,3]);
说相比高程上说的方法,能更好防止变量污染。
于是去翻了翻spidermonkey和v8的实现,发现这个this根本就没用。。。至于apply,我们现在有
Math.min(...[1,2,3]);
ES6大法好啊。。。