2015-10-04 3 views
6

Есть ли функция в JavaScript 6, которая позволяет сопоставлять несколько массивов?Javascript ES6 - карта нескольких массивов

Что-то, как молния:

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

Это похоже на уже ответили на вопрос: [http://stackoverflow.com/questions/4856717/javascript-equivalent-of-pythons-zip-function](http://stackoverflow.com/questions/4856717/javascript-equivalent-of-pythons -zip-function) – HartleySan

ответ

4

К сожалению, нет. То, что вы ищете, обычно называется zip или zipWith. См. Реализацию lodash для справки: https://lodash.com/docs#zipWith

+0

Aww. Я знаю о lodash, но я не могу использовать его прямо сейчас. У вас есть источник этой недостающей функции? (Очень сложно знаю). – nha

+0

Вы имеете в виду исходный код функции 'zipWith'? – lukewestby

+0

Нет. Я не прошу ввести код? Откуда вы знаете, что этого не хватает? Очевидно, что «недостающие функции» не представлены в стандарте ES6. Итак, есть ли у вас ссылка на то, что она отсутствует? – nha

10

Как следует из другого ответа, это обычно называют zip. Он может быть реализован как:

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

Или как функция, в основном:

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

Который позволит вам сделать:

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

Вы также можете использовать reduce, чтобы получить желаемый результат :

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] 
Смежные вопросы