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' ]
javascript
functional-programming
ecmascript-6
Гийом Винсент
источник
источник
elements.map(( element, i ) => `${ i }:${ element }`);
elements.map((element,index) => index + ':' + element)
Ответы:
Да, есть, проверьте
Array.prototype.entries()
.const foobar = ['A', 'B', 'C']; for (const [index, element] of foobar.entries()) { console.log(index, element); }
источник
enumerate
чем[].map()
возвращает итератор.filter
но сохранить индексы, которые были у вас до фильтрации.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"]
источник
entries()
let array = [1, 3, 5]; for (let [index, value] of array.entries()) console.log(index + '=' + value);
источник
Простите, если я невежественен (здесь я немного новичок в JavaScript), но вы не можете просто использовать
forEach
? например:function withIndex(elements) { var results = []; elements.forEach(function(e, ind) { results.push(`${e}:${ind}`); }); return results; } alert(withIndex(['a', 'b']));
Также есть ответ Наомика, который лучше подходит для этого конкретного случая использования, но я просто хотел указать, что он
forEach
также отвечает всем требованиям.ES5 + поддерживается.
источник
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
Раскрытие информации Я автор и сопровождающий Pythonic
источник
pythonic
. Согласно статье « Как не быть спамером» в Справочном центре Stack Overflow: «Сообщество здесь имеет тенденцию голосовать против открытой саморекламы и отмечать ее как спам. Публикуйте хорошие, релевантные ответы, и если некоторые (но не все) будут о ваш продукт или веб-сайт, это нормально. Однако вы должны раскрывать свою принадлежность к своим ответам »,как
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)) }
источник