2015-10-04 17 views
6

Esiste una funzionalità in JavaScript 6 che consente di eseguire il mapping su più array?Javascript ES6 - mappa più array

Qualcosa di simile a una chiusura lampo:

var myFn = function (a, b) { console.log(a, b);} 
    var arr1 = ['a', 'b', 'c']; 
    var arr2 = [1, 2, 3]; 

    arr1.map(myFn, arr2); // imaginary syntax. 
    // prints : 
    // a 1 
    // b 2 
    // c 3 
+0

Questo sembra già rispondere alla domanda: [http://stackoverflow.com/questions/4856717/javascript-equivalent-of-pythons-zip-function](http://stackoverflow.com/questions/4856717/javascript-equivalent-of-pythons -zip-function) – HartleySan

risposta

4

Purtroppo, no. Quello che stai cercando è comunemente chiamato zip o zipWith. Vedere l'implementazione di lodash per un riferimento: https://lodash.com/docs#zipWith

+0

Aww. So di lodash, ma non posso usarlo adesso. Hai una fonte per quella caratteristica mancante? (Abbastanza difficile lo so). – nha

+0

Intendi codice sorgente per una funzione 'zipWith'? – lukewestby

+0

No, non sto chiedendo il codice? Come sai che manca? Ovviamente le "funzionalità mancanti" non sono rappresentate nello standard ES6. Quindi hai un riferimento al punto che manca? – nha

10

Come l'altra risposta indica, questo è comunemente noto come zip. Può essere implementato come:

let zipped = arr1.map((x, i) => [x, arr2[i]]); 

O come una funzione, fondamentalmente:

let zip = (a1, a2) => a1.map((x, i) => [x, a2[i]]); 

Il che permetterà di fare:

zip(["a","b","c"], [1,2,3]); // ["a", 1], ["b", 2], ["c", 3] 
0

Si potrebbe anche usare reduce per ottenere il risultato desiderato :

var arr1 = ['a', 'b', 'c']; 
var arr2 = [1, 2, 3]; 

arr1.reduce((acc, current, index) => { 
    console.log(current, arr2[index]) 
    return [...acc, current, arr2[index]] 
}, []) 

// a 1 
// b 2 
// c 3 
// returns ["a", 1, "b", 2, "c", 3]