javascript - 如何置换二维数组的形状?
问题描述
我有一个从字符串生成的二维数组(调用它matrix
):
131 673 234 103 018
201 096 342 965 150
630 803 746 422 111
537 699 497 121 956
805 732 524 037 331
解析后,它成为下一个数组数组:
[
[131, 673, 234, 103, 018],
[201, 096, 342, 965, 150],
[630, 803, 746, 422, 111],
[537, 699, 497, 121, 956],
[805, 732, 524, 037, 331]
]
但是,我需要对此进行操作,以使数组变成这样:
[
[131],
[201,673],
[630,096,234],
[537,803,342,103],
[805,699,746,965,018],
[732,497,422,150],
[524,121,111],
[037,956],
[331]
]
该数组是2-dimensional
通过跟随up-left
字符串或当前数组的对角线创建的数组。
我认为字符串可以被操纵(可能变成一行)并在正确的位置用换行符重建,以便我当前的代码可以工作,但是我只是想不出如何实现这一点。
要创建数组,我使用以下代码:
matrix.split("\n").reduce((a, b) =>
{
a.push(b.split(" ").map(x => parseInt(x)));
return a;
}, []);
(matrix
是保存我的字符串的变量的名称)
最好,我可以只替换我的减速器功能,但是任何解决方案都会对我大有裨益。
解决方案
根据您的方法,我进行了一些修改以将内部数组的每个项目推到相应的对角线上。当我们推送一个新元素时,我使用Array::unshift()在对角线数组的开头插入。
const matrix = "131 673 234 103 018\n201 096 342 965 150\n630 803 746 422 111\n537 699 497 121 956\n805 732 524 037 331";
let res = matrix.split("\n").reduce((acc, curr, idx1) =>
{
curr.split(" ").forEach((n, idx2) =>
{
// Calculate idx of the diagonal this item belongs.
let dIdx = idx2 + idx1;
// Insert element on the related diagonal.
acc[dIdx] = acc[dIdx] || [];
acc[dIdx].unshift(parseInt(n));
});
return acc;
}, []);
console.log(res);
推荐阅读
- cakephp - 更新后测试:找不到插件类`WyriHaximus\TwigView\Plugin`
- java - 什么是字符串值中的编码器?
- php - Laravel 419 错误 - 使用 Ajax 时出现 VerifyCsrfToken 问题
- python - 将列表中的相同元素写入txt文件
- google-cloud-platform - 部署云功能时出错 ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Forbidden]
- javascript - 动态、ajax 驱动的内容的 200 状态
- node.js - Google App Engine 标准上的 Nodejs 版本
- javascript - 检查选择了哪个选项
- c# - 使用 Roslyn 检查基类是否实现了某个接口
- java - 如何重写我的代码以使 0 的值不会在 java 中给我一个越界错误?