javascript - 将python中的嵌套排序循环转换为javascript
问题描述
我正在尝试将排序和循环从 python 转换为 javascript,但无法弄清楚:(
G = {
0: {0: 100000, 1: 294, 2: 366},
1: {0: 294, 1: 100000, 2: 140},
2: {0: 366, 1: 140, 2: 100000}
}
我在python中有这个for循环:
for W,u,v in sorted((G[u][v], u, v) for u in G for v in G[u]):
并想转换成javascript(必要时使用下划线),并添加魔法使其变成这样:
var y = [
[140, 1, 2),
[140, 2, 1],
[294, 0, 1],
[294, 1, 0],
[366, 0, 2],
[366, 2, 0],
[100000, 0, 0],
[100000, 1, 1],
[100000, 2, 2]]
for in
我已经能够使用两个循环获得数组中的结果列表:
for (u in x) {
for (v in x[u]) {
console.log([x[u][v], u, v])
}
}
这给了我:
[100000, "0", "0"]
[294, "0", "1"]
[366, "0", "2"]
[294, "1", "0"]
[100000, "1", "1"]
[140, "1", "2"]
[366, "2", "0"]
[140, "2", "1"]
[100000, "2", "2"]
但现在我正试图让这些数组按索引 0 和 1 排序,我相信。
解决方案
您可以通过将键作为索引来获取对象并构建数组,然后获取值和索引。然后按第一个第二个和第三个索引处的值对数组进行排序。
var g = { 0: { 0: 100000, 1: 294, 2: 366 }, 1: { 0: 294, 1: 100000, 2: 140 }, 2: { 0: 366, 1: 140, 2: 100000 } },
result = Object
.assign([], g)
.reduce((r, o, i) => {
Object.assign([], o).forEach((v, j) => r.push([v, i, j]));
return r;
}, [])
.sort((a, b) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2]);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- javascript - React Navigation 宽度不是 100% 适合 ios 模拟器上的屏幕
- php - 从多个表中获取利润数据的MYSQL问题
- angular - 如何使用 Angular 下载文件?
- react-native - 不变违规:不支持动态更改 numColumns。虽然我没有改变
- javascript - 如何解决数据表问题,当我从下拉列表中选择活动选项时显示两种状态?
- javascript - 我正在尝试获取一个动态表单,之后需要使用 PHP 将其数据插入数据库
- linux - Candump - candumpanalyzer:找不到命令
- python - 错误:找不到满足要求时间的版本(来自版本:无)
- apache-spark - YARN 在 launch_container.sh 中如何执行 PYSPARK 环境设置
- firebase - Flutter Firebase google登录发布签名密钥问题