簡體   English   中英

通過Java中的大型2D數組以編程方式創建字典

[英]Programmatically creating a dictionary from a large 2D array in Javascript

我有一個2D數組(使用Javascript),帶有四個元素的RED ,每個元素都有另外四個元素(方括號之外的部分不是數組的一部分,只是標簽)。

          Ab  Cd  Ef  Gh
 Red1   [['1','2','3','4'],
 Red2    ['4','3','2','1'],
 Red3    ['5','6','7','8'],
 Red4    ['8','7','6','5']]

我需要將其轉換為帶標簽的字典(我正嘗試使用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)。

$(function() {
    $('#btn-send-email').click(function() {
        $.getJSON('http://www.example.com/email', {
            exone: example[0],
            extwo: example[1],
            [dictionary objects from array RED go here]
        })
    })
})

謝謝。

好了,這是使用一兩個簡單的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];

或者,不只是使用字符串letters還可以在數組中定義“ x軸”標簽:

    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"]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM