2015-12-17 9 views
27

c'è un equivalente di 'enumerare' pitone in ES6c'è un equivalente di 'enumerare' pitone 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 equivalente senza 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

ma map o forEach farlo già, può ottenere sia l'elemento che l'indice – juvian

+0

Come dice @juvian, perché non usare solo l'indice disponibile nella mappa? 'elements.map ((element, i) => \' $ {i}: $ {element} \ ');' –

+0

@JamesAllardice con il doc di mozilla: 'elements.map ((elemento, indice) => indice + ':' + elemento) ' –

risposta

25

Sì c'è, Assegno fuori Array.prototype.entries().

+0

Questo, così semplice, così bello. È più vicino al 'enumerate' di python che a' [] .map() ', restituisce un iteratore. – Shanoor

+0

Questo non è equivalente all'utilizzo di map ((el, idx) => ..), poiché forse si desidera eseguire un 'filter' ma mantenere gli indici che si avevano prima del filtraggio. – derekdreery

+0

È fantastico! Mi piace quando i miei due linguaggi (python e js) sono uguali. :) –

10

Array.prototype.map fornisce già l'indice come secondo argomento della procedura di richiamata ... ed è supported quasi ovunque.

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

Mi piace ES6 troppo

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

Mi scusi se devo essere ignorante (po 'di un novizio di JavaScript qui), ma non puoi semplicemente usare forEach? per esempio:

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

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

C'è anche naomik's risposta che è una misura migliore per questo particolare caso d'uso, ma volevo solo far notare che forEach si inserisce anche il disegno di legge.

ES5 + supportato.

Problemi correlati