2015-12-17 13 views
27

ist es ein Äquivalent von 'aufzählen' Python in ES6ist es ein Äquivalent von 'aufzählen' Python in 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'] 

Javascript ES6 Äquivalent ohne 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

aber map oder forEach tun dies bereits, kann sowohl Element und Index – juvian

+0

Wie @juvian sagt, warum nicht einfach den Index in der Karte verfügbar verwenden? 'elements.map ((element, i) => \ $ {i}: $ {element} \'); ' –

+0

@JamesAllardice mit dem doc von mozilla:' elements.map ((element, index) => index + ':' + Element) ' –

Antwort

25

Ja, es ist, Scheck aus Array.prototype.entries().

+0

Dies, so einfach, so cool. Es ist näher am Python 'enumerate' als' [] .map() ', es gibt einen Iterator zurück. – Shanoor

+0

Dies ist nicht äquivalent zur Verwendung von map ((el, idx) => ..), da Sie vielleicht einen 'Filter' durchführen möchten, aber die Indizes beibehalten, die Sie vor dem Filtern hatten. – derekdreery

+0

Das ist so toll! Ich liebe es, wenn meine zwei Sprachen (Python und Js) gleich aussehen. :) –

10

Array.prototype.map gibt Ihnen bereits den Index als zweites Argument für das Callback-Verfahren ... Und es ist supported fast überall.

['a','b'].map(function(element, index) { return index + ':' + element; }); 
//=> ["0:a", "1:b"] 

Ich mag ES6 zu

['a','b'].map((e,i) => `${i}:${e}`) 
//=> ["0:a", "1:b"] 
2

Entschuldigen Sie mich, wenn ich unwissend (bisschen ein Neuling auf JavaScript hier) zu sein bin, kann aber nicht einfach forEach benutzen? z:

function withIndex(elements) { 
 
    var results = []; 
 
    elements.forEach(function(e, ind) { 
 
     results.push(`${e}:${ind}`); 
 
    }); 
 
    return results; 
 
} 
 

 
alert(withIndex(['a', 'b']));

Es gibt auch naomik's Antwort, die eine bessere Passform für diesen speziellen Anwendungsfall ist, aber ich wollte nur darauf hinweisen, dass forEach auch die Rechnung passt.

ES5 + unterstützt.

Verwandte Themen