所以我有这个问题。

我有一个包含3个数组的对象...

items = {
    a: ['STRAWBERRY', 'PEANUT'],
    b: ['John', 'Doe', 'Scarface'],
    c: ['Circle', 'Square', 'Triangle', 'Rectangle'],
}


我需要以下输出:

[
    'STRAWBERRY',
    'John',
    'Circle',
    'PEANUT',
    'Doe',
    'Square',
    'Scarface',
    'Triangle',
    'Rectangle'
]


请注意,“项目”对象的每个阵列的每个值之间的输出交织

我试图找出一种实现这种“合并”的好方法,但我只能想到带有大量代码和大量代码的大型方法。

有没有一种快速且优化的方法来做到这一点?

附注:我可以使用任何框架。

编辑
使用@evillive答案,我能够适应我在Coffee Script中的代码

使用咖啡脚本的解决方案

result = []
col = -1
loop
  col++
  run = false
  for k of Items
    Items[k][col] and (run = result.push(Items[k][col]))
  unless run
    break

console.log result

最佳答案

无需查找最大长度参数。

var result = [];
while(Object.getOwnPropertyNames(items).length){
  for(var k in items){
    result.push(items[k].shift());
    if (items[k].length == 0) delete items[k];
  }
}


更新:
不幸的是,shiftdelete指令使以前的代码在性能上不足。所以我重写了它以使其更快。

var result = [], col = -1, run;
do {
    col++; run = false;
    for(var k in items){
        items[k][col] && (run = result.push(items[k][col]))
    }
} while(run)

09-25 21:07