对于一个序列,ES6等价于 Python 的“枚举”是什么?

Python 有一个 内置函数 enumerate,以获得一个可迭代的 (index, item)对。

ES6是否有一个数组的等价物? 它是什么?

def elements_with_index(elements):
modified_elements = []
for i, element in enumerate(elements):
modified_elements.append("%d:%s" % (i, element))
return modified_elements


print(elements_with_index(["a","b"]))
#['0:a', '1:b']

ES6相当于没有 enumerate:

function elements_with_index(elements){
return elements.map(element => elements.indexOf(element) + ':' + element);
}


console.log(elements_with_index(['a','b']))
//[ '0:a', '1:b' ]
63022 次浏览

有的,看看 Array.prototype.entries()

const foobar = ['A', 'B', 'C'];


for (const [index, element] of foobar.entries()) {
console.log(index, element);
}

数组,原型,地图

Array.prototype.map已经将索引作为回调过程的第二个参数给出了... ... 而且几乎所有地方都是 支持

['a','b'].map(function(element, index) { return index + ':' + element; });
//=> ["0:a", "1:b"]

我也喜欢 ES6

['a','b'].map((e,i) => `${i}:${e}`)
//=> ["0:a", "1:b"]

让它变得懒惰

然而,python 的 enumerate是惰性的,所以我们也应该对这个特征建模-

function* enumerate (it, start = 0)
{ let i = start
for (const x of it)
yield [i++, x]
}


for (const [i, x] of enumerate("abcd"))
console.log(i, x)

0 a
1 b
2 c
3 d

指定第二个参数 start允许调用方控制 index-的转换

for (const [i, x] of enumerate("abcd", 100))
console.log(i, x)
100 a
101 b
102 c
103 d

请原谅我的无知(对 JavaScript 有点新手的意思) ,但是你就不能用 forEach吗? 例如:

function withIndex(elements) {
var results = [];
elements.forEach(function(e, ind) {
results.push(`${e}:${ind}`);
});
return results;
}


alert(withIndex(['a', 'b']));

也有 Naomi 的的答案,这是一个更好的适合这个特定的用例,但我只是想指出,forEach也符合法案。

支持 ES5 + 。

pythonic 提供了一个 enumerate函数,它适用于所有可迭代文件,而不仅仅是数组,并且返回一个 迭代器,就像 python:

import {enumerate} from 'pythonic';


const arr = ['a', 'b'];
for (const [index, value] of enumerate(arr))
console.log(`index: ${index}, value: ${value}`);
// index: 0, value: a
// index: 1, value: b

我是 Python 的作者和维护者

就像 KyleShanoor说的是 Entry ()

但对于像我这样的新手来说,很难完全理解它的含义。

这里给出一个可以理解的例子:

for(let curIndexValueList of someArray.entries()){
console.log("curIndexValueList=", curIndexValueList)
let curIndex = curIndexValueList[0]
let curValue = curIndexValueList[1]
console.log("curIndex=", curIndex, ", curValue=", curValue)
}

相当于 python码:

for curIndex, curValue in enumerate(someArray):
print("curIndex=%s, curValue=%s" % (curIndex, curValue))
}

let array = [1, 3, 5];
for (let [index, value] of array.entries())
console.log(index + '=' + value);