我有一个按字母顺序排列的值数组:
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']
问题:如何处理具有剩余部分的集合的此方案?我的做法完全没了?
答案 0 :(得分:0)
我认为你有一个bug
Math.ceil(a.length/cols)
我假设您的预期形状已经关闭 - 因为您正在进行第一列排序,所以您应该期待这个解决方案:
['a','f','k',
'b','g','l',
'c','h','m',
'd','i',,
'e','j',,]
(Math.ceil
将为您提供)。
无论哪种方式,您都需要在那里使用天花板来固定2D阵列的最终形状。您的代码中存在实际错误。
如果您的预期结果没有关闭,并且您实际上希望从字符串的“中间”“溢出”,那么您的问题就没有优雅的解决方案 - 您必须手动找出首先溢出,然后在删除字符串的那部分后使用优雅的解决方案