gpt4 book ai didi

javascript - ES6 使用 for..of 反向迭代数组,我是否遗漏了规范中的内容?

转载 作者:可可西里 更新时间:2023-11-01 02:08:30 25 4
gpt4 key购买 nike

在 ES6 中我们现在有 iteratorsfor..of迭代它们。我们有一些内置的 arrays ;特别是 keys , valuesentries .

这些方法允许人们执行通常会执行的大部分迭代。但是,反向迭代呢?这也是一项非常常见的任务,我在 spec 中没有看到任何内容。专门为它?还是我错过了?

好的,我们有 Array.prototype.reverse但我不一定想就地反转一个大数组,然后在完成后再次反转它。我也不想使用 Array.prototype.slice制作一个临时的浅拷贝并反转它只是为了迭代。

所以我看了一下generators并提出了这些可行的解决方案。

(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);
}
}());
<pre id="out"></pre>

这真的是 ES6 中反向迭代的预期方式,还是我错过了规范中的一些基本内容?

最佳答案

Is this really the way that reverse iteration is intended in ES6?

有一个反向迭代的提议,在 esdicuss 上讨论过和一个概述 spec 的 git 项目,但似乎没有发生任何事情。 ES6 现在已经完成,所以这次不会添加它。不管怎样,对于数组和字符串,我已经写了一些代码来填补空白(在我看来),我会把它贴在这里,因为它可能对其他人有帮助。这段代码基于我今天的浏览器,如果在它们上实现了更多的 ES6,则可能会做出一些改进。稍后我可能会处理要点或小型 github 项目。

更新:我创建了一个 GitHub项目为此工作。

关于javascript - ES6 使用 for..of 反向迭代数组,我是否遗漏了规范中的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32444463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com