Python有一个built-in function 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' ]
答案 0 :(得分:38)
是的,请查看Array.prototype.entries()
。
答案 1 :(得分:15)
Array.prototype.map
已经将索引作为回调过程的第二个参数...而且它几乎无处不在supported。
['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"]
答案 2 :(得分:12)
let array = [1, 3, 5];
for (let [index, value] of array.entries())
console.log(index + '=' + value);
答案 3 :(得分:3)
打扰一下,如果我是无知的(这里是JavaScript的新手),但是你不能只使用forEach
吗? e.g:
function withIndex(elements) {
var results = [];
elements.forEach(function(e, ind) {
results.push(`${e}:${ind}`);
});
return results;
}
alert(withIndex(['a', 'b']));

还有naomik's回答哪个更适合这个特定用例,但我只是想指出forEach
也符合这个要求。
支持ES5 +。
答案 4 :(得分:2)
pythonic
提供enumerate
函数,该函数适用于所有迭代,而不仅仅是数组,并返回Iterator,如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
答案 5 :(得分:0)
如Kyle
和Shanoor
所说的是Array.prototype.entries()
但是对于像我这样的新手,很难完全理解其含义。
所以这里举一个可以理解的例子:
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))
}