2015-10-04 27 views
6

Có tính năng nào trong JavaScript 6 cho phép ánh xạ trên nhiều mảng không?Javascript ES6 - ánh xạ nhiều mảng

Cái gì đó như một dây kéo:

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

Điều này dường như đã trả lời câu hỏi: [http://stackoverflow.com/questions/4856717/javascript-equivalent-of-pythons-zip-function](http://stackoverflow.com/questions/4856717/javascript-equivalent-of-pythons -zip-chức năng) – HartleySan

Trả lời

4

Thật không may, không có. Những gì bạn đang tìm kiếm thường được gọi là zip hoặc zipWith. Xem triển khai của lodash để tham khảo: https://lodash.com/docs#zipWith

+0

Aww. Tôi biết về lodash, nhưng tôi không thể sử dụng nó ngay bây giờ. Bạn có nguồn cho tính năng bị thiếu đó không? (Khá khó biết). – nha

+0

Bạn có nghĩa là mã nguồn cho một hàm 'zipWith'? – lukewestby

+0

Không, tôi không yêu cầu mã? Làm thế nào để bạn biết rằng nó bị thiếu? Rõ ràng là "các tính năng bị thiếu" không được trình bày trong tiêu chuẩn ES6. Vì vậy, bạn có một tham chiếu đến điểm mà nó bị thiếu? – nha

10

Như câu trả lời khác chỉ ra, điều này thường được gọi là zip. Nó có thể được thực hiện như:

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

Hoặc như một chức năng, về cơ bản:

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

Trong đó sẽ cho phép bạn làm:

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

Bạn cũng có thể sử dụng reduce để có được những kết quả mong muốn :

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] 
Các vấn đề liên quan