构建具有表行值的关联数组

时间:2013-08-29 18:05:08

标签: javascript jquery arrays associative-array

我正在尝试使用用户单击的表行的值构建和数组。

所以现在我把所有这些都放在了

$('#myDiv').find('tr').click(function(){

并将变量分配给用户单击的行中表格中的列

var firstName = $(this).find('td:nth-child(1)').text();     
var middleName = $(this).find('td:nth-child(2)').text();        
var lastName = $(this).find('td:nth-child(3)').text();

所以现在我想把它们放在一个数组中

var userRow = [];
userRow['firstName'] = firstName;
userRow['middleName'] = middleName;
userRow['lastName'] = lastName;

所以事实是,用户可以点击多个表行。单击一行时,它会切换行中的一个类“突出显示”(这会更改行的背景颜色)

我坚持创建一个循环,以便他们点击的所有行都被添加到另一个数组中。有点像这样 -

Array1 {
      userRow {
            'firstName' = ...;
             ect...
      }
}

所以当我引用Array1时,它会向我显示我从所有行中获取的所有信息,其中包含'highlight'类,我将其放入数组'userRow'

我已经阅读了javascript数组,但就像我说我被困住了并且可以使用一些帮助。非常感谢,谢谢。

编辑:我现在就要离开,明天我会回来选择答案。感谢所有人帮助我理解

4 个答案:

答案 0 :(得分:1)

javascript中的数组是索引的,而不是关联的。但是,javascript对象的行为非常类似于关联数组。因此,您可以这样做:

var userRow = {}; // curly brackets!
userRow['firstName'] = firstName;
userRow['middleName'] = middleName;
userRow['lastName'] = lastName;

然后,您通常可以将此userRow对象添加到另一个数组中:

var Array1 = [];
Array1.push(userRow);

答案 1 :(得分:1)

Javascript没有关联数组。看起来像关联数组的语法实际上是对象的括号表示法。因此myObj.prop1myObj['prop1']完全相同。

我想你想要这样的东西:

var selectedRows = $.map($('#myDiv tr.highlight'), function(row, idx) {     
    $row = $(row);
    return {
        firstName : $row.find('td:nth-child(1)').text(),   
        middleName : $row.find('td:nth-child(2)').text(),   
        lastName : $row.find('td:nth-child(3)').text()
    };
});

selectedRows将是一个数组,其中包含许多带有firstNamemiddleNamelastName键的对象。

答案 2 :(得分:1)

JS-array不支持字符串键。 改为使用对象:

var userRow = {};
userRow.firstName = firstName;
userRow.middleName = middleName;
userRow.lastName = lastName;

之后,您可以将userRow推送到Array1

Array1 = [];
Array1.push(userRow);

或再次使用对象:

WrapObj = {};   // like Array1 but object
WrapObj.someId = userRow;

答案 3 :(得分:1)

我认为你可以使用类似的东西。

我会以您编写的方式编写简单的代码,以便您轻松理解。

var arr;

$('#myDiv').find('tr').click(function(){

   // initialize array
   if (typeof(arr) == 'undefined')) {
       arr = new Array();
   }); 

   // read values
   var firstName = $(this).find('td:nth-child(1)').text();     
   var middleName = $(this).find('td:nth-child(2)').text();        
   var lastName = $(this).find('td:nth-child(3)').text();

   // create your object
   var yourObject = {
       'firstName' : firstName,
       'middleName' : middleName,
       'lastName' : lastName
   };

   // add your object to the array
   arr.push(yourObject); 
});