Xot*_*750 12 javascript arrays reverse iterator ecmascript-6
在ES6中,我们现在有迭代器和for..of来迭代它们.我们有一些数组内置函数 ; 特别是键,值和条目.
这些方法允许人们执行通常执行的大部分迭代.但是,反向迭代怎么样?这也是一个非常常见的任务,我没有在规范中看到任何具体的内容吗?或许我错过了?
好的,我们有Array.prototype.reverse但是我不一定想要在适当的位置反转大型数组,然后在完成时再次反转它.我也不想使用Array.prototype.slice来制作一个临时的浅拷贝并反转那个迭代.
所以我看了一下发电机并提出了这些有效的解决方案.
(function() {
'use strict';
function* reverseKeys(arr) {
let key = arr.length - 1;
while (key >= 0) {
yield key;
key -= 1;
}
}
function* reverseValues(arr) {
for (let key of reverseKeys(arr)) {
yield arr[key];
}
}
function* reverseEntries(arr) {
for (let key of reverseKeys(arr)) {
yield [key, arr[key]];
}
}
var pre = document.getElementById('out');
function log(result) {
pre.appendChild(document.createTextNode(result + '\n'));
}
var a = ['a', 'b', 'c'];
for (var x of reverseKeys(a)) {
log(x);
}
log('');
for (var x of reverseValues(a)) {
log(x);
}
log('');
for (var x of reverseEntries(a)) {
log(x);
}
}());Run Code Online (Sandbox Code Playgroud)
<pre id="out"></pre>Run Code Online (Sandbox Code Playgroud)
这是否真的是ES6中反向迭代的方式,或者我错过了规范中的基本内容?
| 归档时间: |
|
| 查看次数: |
5348 次 |
| 最近记录: |