web-dev-qa-db-ja.com

ES6でのシーケンスのPython 'enumerate'と同等のものは何ですか?

Pythonには、(index, item)ペアの反復可能を取得するための 組み込み関数enumerate があります。

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']

enumerateなしのES6同等物:

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

console.log(elements_with_index(['a','b']))
//[ '0:a', '1:b' ]
53

はい、あります。チェックアウト Array.prototype.entries()

41
Kyle

Array.prototype.mapは、すでにコールバックプロシージャの2番目の引数としてインデックスを提供しています...そして、ほとんどすべての場所で サポート です。

['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"]
17
user633183
let array = [1, 3, 5];
for (let [index, value] of array.entries()) 
     console.log(index + '=' + value);
16
tav

私が無知である場合はすみません(ここではJavaScriptの初心者)が、forEachだけを使用することはできませんか?例えば:

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
James Ko

Pythonic は、配列だけでなくすべての反復可能要素で機能するenumerate関数を提供し、pythonのように Iterator を返します。

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

Disclosure私はPythonicの著者であり、メンテナーです

2
Keyvan

KyleおよびShanoor sayは 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