JavaScript ES6 - 映射多个数组

24

JavaScript 6有没有一种功能可以映射多个数组?

类似于拉链的东西:

 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

这似乎已经回答了这个问题:https://dev59.com/Cm445IYBdhLWcg3wcZ8N - HartleySan
4个回答

43

正如其他答案所指出的,这通常被称为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]

10

啊,我知道lodash,但现在无法使用它。你有缺失功能的来源吗?(我知道这很困难) - nha
不,我不是在问代码。你怎么知道它缺失了?显然,“缺失的功能”没有在ES6标准中表示。那么,你有没有参考资料可以指出它确实缺失了? - nha
2
明白了!这是 Array 在 MDN 上的参考链接:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array。它列出了所有可用于 Array.prototype 的方法,你会发现你要找的功能并不存在。 - lukewestby
谢谢,我会尽快接受您的答案。 - nha

8
您也可以使用 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]

1
这不是用户想要的,他们想要 ["a", 1], ["b", 2], ["c", 3],而不是 ["a", 1, "b", 2, "c", 3],对吧? - Lifeweaver

1
参考了@Onaracs的答案并进行了编辑。

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

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

console.log(arr3)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接