在Javascript中从大型2D数组以编程方式创建字典

在Javascript中从大型2D数组以编程方式创建字典,javascript,jquery,ajax,arrays,Javascript,Jquery,Ajax,Arrays,我有一个2D数组(Javascript),RED有四个元素,每个元素都有另外四个元素(括号外的部分不是数组的一部分,只是标签) 我需要将其转换为一个带标签的字典(我正试图使用jQuery通过AJAX将其发送到一个Flask Python文件) 所以基本上我想要一本看起来像 {red1_ab: 1, red1_cd: 2, red1_ef: 3, red1_gh: 4, red2_ab: 4 ...} 如何在不手动创建16个变量的情况下实现这一点?或者有没有办法通过jQuery$.getJSON

我有一个2D数组(Javascript),
RED
有四个元素,每个元素都有另外四个元素(括号外的部分不是数组的一部分,只是标签)

我需要将其转换为一个带标签的字典(我正试图使用jQuery通过AJAX将其发送到一个Flask Python文件) 所以基本上我想要一本看起来像

{red1_ab: 1, red1_cd: 2, red1_ef: 3, red1_gh: 4, red2_ab: 4 ...}
如何在不手动创建16个变量的情况下实现这一点?或者有没有办法通过jQuery$.getJSON发送2D数组

下面是我的AJAX调用(Javascript),仅供参考


谢谢。

这里有一种方法可以通过一两个简单的for循环进行结构转换:

var RED = [['1','2','3','4'],
           ['4','3','2','1'],
           ['1','2','3','4'],
           ['4','3','2','1']],
    dictionary = {},
    letters = "abcdefghijklmnopqrstuvwxyz",
    i,
    j;
for (i = 0; i < RED.length; i++)
    for (j = 0; j < RED[i].length; j++)
        dictionary["red" + (i+1) + "_" + letters.substr(j*2,2)] = RED[i][j];
…然后:

    dictionary["red" + (i+1) + "_" + x[j]] = RED[i][j];
函数objectFromMatrix(矩阵、行名、列名){
var obj={};
对于(变量i=0;i
谢谢。出于某种原因,我认为Javascript不允许用户将变量名与其他变量拼凑在一起。在本例中,它们不是变量名,而是对象属性名。对象属性可以作为
someObject.somePropName
someObject[“somePropName”]
访问-如果使用
[]
语法,则可以包含任何计算结果为所需属性名称的字符串的表达式。
var RED = [['1','2','3','4'],
           ['4','3','2','1'],
           ['1','2','3','4'],
           ['4','3','2','1']],
    dictionary = {},
    letters = "abcdefghijklmnopqrstuvwxyz",
    i,
    j;
for (i = 0; i < RED.length; i++)
    for (j = 0; j < RED[i].length; j++)
        dictionary["red" + (i+1) + "_" + letters.substr(j*2,2)] = RED[i][j];
    x = ["ab","cd","ef","gh"],
    dictionary["red" + (i+1) + "_" + x[j]] = RED[i][j];
function objectFromMatrix(matrix, rowNames, columnNames) {
    var obj = {};
    for(var i = 0; i < matrix.length; i++) {
        var currentRow = matrix[i],
            rowName = rowNames[i];
        for(var j = 0; j < currentRow.length; j++) {
            var columnName = columnNames[j];
            obj[rowName + "_" + columnName] = currentRow[j];
        }
    }
    return obj;
}

var RED = [['1','2','3','4'],
           ['4','3','2','1'],
           ['5','6','7','8'],
           ['8','7','6','5']];

objectFromMatrix(RED, ["red1", "red2", "red3", "red4"], ["Ab", "Cd", "Ef", "Gh"]);