В 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' ]
6 ответов
Да, есть, посмотрите Array.prototype.entries()
.
const foobar = ['A', 'B', 'C'];
for (const [index, element] of foobar.entries()) {
console.log(index, element);
}
Как 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))
}
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
Раскрытие информации Я автор и сопровождающий Pythonic.
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"]
Извините, если я в неведении (новичок в JavaScript здесь), но вы не можете просто использовать forEach
? например:
function withIndex(elements) {
var results = [];
elements.forEach(function(e, ind) {
results.push(`${e}:${ind}`);
});
return results;
}
alert(withIndex(['a', 'b']));
Также есть ответ naomik, который лучше подходит для этого конкретного случая использования, но я просто хотел отметить, что {{X0 }} также отвечает всем требованиям.
ES5 + поддерживается.
let array = [1, 3, 5];
for (let [index, value] of array.entries())
console.log(index + '=' + value);
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.