В 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' ]
108
Guillaume Vincent 17 Дек 2015 в 17:25

6 ответов

Лучший ответ

Да, есть, посмотрите Array.prototype.entries().

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

for (const [index, element] of foobar.entries()) {
  console.log(index, element);
}
62
Flimm 8 Ноя 2019 в 13:58

Как 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))
}
0
crifan 27 Июл 2018 в 07:41

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.

3
Keyvan 24 Июн 2019 в 22:56

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"]
21
Paul Rooney 24 Мар 2017 в 02:53

Извините, если я в неведении (новичок в 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 + поддерживается.

4
Community 23 Май 2017 в 12:10
let array = [1, 3, 5];
for (let [index, value] of array.entries()) 
     console.log(index + '=' + value);
21
tav 4 Авг 2018 в 08:21