2013-12-20 4 views
0

Ну, проблема довольно проста. Я получил объект проанализированных строк таблицы. Код для него это:Как добавить переменную в объект javascript/jQuery?

var erg = []; 
    $("tr").each(function (index) { 
     var row = {}; 

     var test = $(this).children(); 
     row['column1'] = test[0].textContent; 
     row['column2'] = test[1].textContent; 
     row['column3'] = test[2].textContent; 
     row['column4'] = test[3].textContent; 
     row['column5'] = test[4].textContent; 
     row['column6'] = test[5].textContent; 
     row['column7'] = test[6].textContent;   
     erg.push(row); 
    }); 

И я хочу передать переменную var my_variable="blabla" к ней, не разрушая структуру объекта. Так как же я привести этот объект в структуру, как это ?:

Object{my_variable="my_variable_value"}, Object{my_table=[Object{...}, Object{...}]} //all the objects of the table 

$.extend({}, erg, my_variable); только испортили мой объект вверх.

Я хочу, чтобы он был в этой структуре, поэтому я могу передать его как json в свой php-скрипт и легко фильтровать переменную. Любые советы, ссылки, фрагменты кода? :)

ответ

3

Я не уверен, в какой момент вы хотите добавить это, но вы можете просто обернуть свой массив другим объектом и добавить свое свойство к тому же самому объекту.

Это в основном то, что делает ответ Флоран, но с помощью литерала объекта, а не «класс» и прототип:

// (your current code) 
var wrapper = { 
    my_variable: 'something', 
    my_table: erg 
}; 
+0

ИМХО это более чистый подход, чем мой. – Florent

+0

Хе-хе. Да, я подумал об этом несколько минут назад. Сейчас я так глуп: D Это действительно так просто. – user2718671

1

Вы можете определить класс и добавить необходимые переменные в свой прототип.
Сначала вам нужно немного утилиту сделать:

function createSharedStruct() { 
    // Define a shared structure 
    var Struct = function() {}; 

    // Define a method to define a shared variable 
    Struct.share = function(variable, value) { 
    Struct.prototype[variable] = value; 
    }; 

    return Struct; 
} 

А потом, обновить свой код:

// Create the shared structure 
var rowClass = createSharedStruct(); 

// Register your shared variables 
rowClass.share('my_variable', 'my_variable_value'); 

var erg = []; 
$("tr").each(function (index) { 
    var test = $(this).children(); 

    // Create a new row 
    var row = new rowClass(); 
    row['column1'] = test[0].textContent; 
    row['column2'] = test[1].textContent; 
    row['column3'] = test[2].textContent; 
    row['column4'] = test[3].textContent; 
    row['column5'] = test[4].textContent; 
    row['column6'] = test[5].textContent; 
    row['column7'] = test[6].textContent;   
    erg.push(row); 
}); 

// No matter when you share a variable, it will be defined among 
// all instances of the same struct. 
rowClass.share('my_other_var', 42); 

Теперь вы можете получить доступ к общим переменным:

console.log(erg[0].my_other_variable); // 42 
console.log(erg[1].my_other_variable); // 42 

Demo available on JSFiddle ,

+0

Wow! Thx для вашего ответа! Но я просто был глуп и не испытывал опыта работы с объектами или jsons. Существует простое решение для моей проблемы: var json = { таблица: erg, переменная: my_variable }; – user2718671

+0

Есть ли веская причина, почему мой ответ был опущен? – Florent

+0

Возможно, потому, что вы слишком усложнили решение (это было не я, кстати). – bfavaretto

Смежные вопросы