如果有剩余的lodash,如何将排序的数组排序到列中?

时间:2018-03-14 23:51:45

标签: javascript lodash

我有一个按字母顺序排列的值数组:

const arr = ['abcdefghijkl'].split('');

我希望按字母顺序获取字母的顺序是1个扁平集合中的列。

例如3 cols:

['a','e','i',
 'b','f','j',
 'c','g','k',
 'd','h','l']

我们可以使用fp lib(例如lodash:

)轻松完成此操作
const arr = 'abcdefghijkl'.split('');

function orderByCols(a, cols) {
  return flatten(zip(...chunk(a, (a.length/cols))))
}

let output = orderByCols(arr, 3);

直播代码: https://stackblitz.com/edit/order-by-cols

当我们对数组进行分块并且有一个剩余部分时会出现问题:

const remainderArr = ['abcdefghijklm'].split(''); // added 'm'

这使一切陷入混乱。

预期输出如下:

 ['a','f','j',
  'b','g','k',
  'c','h','l',
  'd','i','m',
  'e']

问题:如何处理具有剩余部分的集合的此方案?我的做法完全没了?

1 个答案:

答案 0 :(得分:0)

我认为你有一个bug

Math.ceil(a.length/cols)

我假设您的预期形状已经关闭 - 因为您正在进行第一列排序,所以您应该期待这个解决方案:

['a','f','k', 'b','g','l', 'c','h','m', 'd','i',, 'e','j',,]

Math.ceil将为您提供)。

无论哪种方式,您都需要在那里使用天花板来固定2D阵列的最终形状。您的代码中存在实际错误。

如果您的预期结果没有关闭,并且您实际上希望从字符串的“中间”“溢出”,那么您的问题就没有优雅的解决方案 - 您必须手动找出首先溢出,然后在删除字符串的那部分后使用优雅的解决方案