2013-11-28 3 views
0

У меня есть 2D-массив (в Javascript), RED с четырьмя элементами, каждый из которых имеет еще четыре элемента (части вне скобок не являются частью массива, просто метки).Программирующее создание словаря из большого 2D-массива в Javascript

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

И мне нужно, чтобы преобразовать это в меченого словарь (я пытаюсь отправить это через AJAX с помощью JQuery в файл Колба Python.) Поэтому в основном я хочу словарь, который выглядит как

{red1_ab: 1, red1_cd: 2, red1_ef: 3, red1_gh: 4, red2_ab: 4 ...} 

Как это сделать без создания 16 переменных вручную? Или есть способ отправить 2D-массив через jQuery $ .getJSON?

Для справки, мой вызов 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] 
     }) 
    }) 
}) 

Thanks.

ответ

0

Ну вот способ сделать преобразование структуры с простым для петли или два:

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 = ["ab","cd","ef","gh"], 

... а потом:

dictionary["red" + (i+1) + "_" + x[j]] = RED[i][j]; 
+0

Спасибо. По какой-то причине я думал, что Javascript не позволяет пользователям группировать имена переменных с другими переменными. – quantumtremor

+0

В этом случае они не являются именами переменных, они являются именами объектов. Свойства объекта могут быть доступны как 'someObject.somePropName' или' someObject ["somePropName"] '- если вы используете синтаксис' [] ', вы можете включить любое выражение, которое оценивается как строка, которая является именем свойства, которое вы хотите. – nnnnnn

0
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"]); 
Смежные вопросы