Javascript 如何创建转置N个数组的通用Map/Zip函数

Javascript 如何创建转置N个数组的通用Map/Zip函数,javascript,arrays,dictionary,functional-programming,transpose,Javascript,Arrays,Dictionary,Functional Programming,Transpose,我有N个数组。如何创建一个通用的Map/Zip函数,将N个数组转置到一起。例如,请参见下面的代码。 另外,如何使其适用于多维数组。 多谢各位 // A Arrays const arrayA1 = [{name: "James"}, {name: "John"}, {name: "Jack"}] const arrayA2 = [{age: 10}, {age: 20}, {age: 12}] // B Arrays const arrayB1 = [{name: "James"}, {nam

我有N个数组。如何创建一个通用的Map/Zip函数,将N个数组转置到一起。例如,请参见下面的代码。 另外,如何使其适用于多维数组。 多谢各位

// A Arrays
const arrayA1 = [{name: "James"}, {name: "John"}, {name: "Jack"}]
const arrayA2 = [{age: 10}, {age: 20}, {age: 12}]

// B Arrays
const arrayB1 = [{name: "James"}, {name: "John"}, {name: "Jack"}]
const arrayB2 = [{age: 10}, {age: 20}, {age: 12}]
const arrayB3 = [{height: 150}, {height: 200}, {height: 180}] 

const result = {}
const result1 = {}

// Transpose A Arrays Only (does not work for B Arrays)------ How can i make the  SAME function work for both A and B arrays
arrayA1.map((x, y) => {
  let abc = [x, arrayA2[y]];
  result1[y] = abc;   
  result[x.name] = arrayA2[y]
})


console.log(result);
// { James: { age: 10 }, John: { age: 20 }, Jack: { age: 12 } }

// WHICH IS BETTER IMPLEMENTATION >>>>>> result or result1 >> I intend to send to mongodb

console.log(result1);
/*
{ '0': [ { name: 'James' }, { age: 10 } ],
  '1': [ { name: 'John' }, { age: 20 } ],
  '2': [ { name: 'Jack' }, { age: 12 } ] }
*/

更好的结果结构是对象数组,如

[
  {name: xxx, age: yyy},
  {name: xxx, age: yyy},
  {name: xxx, age: yyy}
]
下面是生成它的代码:

//A数组
const arrayA1=[{name:“James”},{name:“John”},{name:“Jack”}]
const arrayA2=[{age:10},{age:20},{age:12}]
//B阵列
const arrayB1=[{name:“James”},{name:“John”},{name:“Jack”}]
const arrayB2=[{age:10},{age:20},{age:12}]
常量arrayB3=[{height:150},{height:200},{height:180}]
//
zip=(…数组)=>arrays[0].map((,n)=>arrays.map(a=>a[n]);
merge=(x,y)=>Object.assign(x,y);
zipMerge=(…数组)=>zip(…数组).map(props=>props.reduce(merge,{}))
//
控制台日志(zipMerge(arrayA1,arrayA2))

log(zipMerge(arrayB1、arrayB2、arrayB3))
非常感谢您的帮助。我只想问一个后续问题。如果**A数组**和*B数组被包装在一个对象文本中,那么如何修改代码以获取单个对象参数:
zipMerge(arraysA)
zipMerge(arraysB)
,这样我就不必将许多单独的数组作为参数传入。@Ming:要使
zip
接受数组而不是变量参数,只需删除splat操作符
谢谢@georg我怎样才能学会像这样编写功能代码。是否有任何资源或书籍。我应该使用库(ramda、lodash等)还是只使用js中的本机函数(map、reduce、filter)@Ming:很不错