在jQuery / javascript中访问动态命名数组

时间:2013-09-13 21:44:47

标签: javascript jquery arrays

我希望根据包含单击按钮的表格行命名数组。

我得到了表格行:

var rowNum = $(this).parent().parent().index();

现在,我想命名数组并访问它。

var arrayName = 'arrTR' + rowNum;
window[arrayName] = new Array();
window[arrayName]["First"] = "Bob";
window[arrayName]["Last"] = "Roberts";
window[arrayName]["email"] = "me@there.com";

//The array should be accessible as arrTR__
alert(arrTR1["Last"]);

警报不起作用,所以我做错了。

我应该如何重构代码以允许我更新和访问数组?

jsFiddle

3 个答案:

答案 0 :(得分:1)

这样的事情怎么样?

$('.getinfo').click(function() {

    var result = $('table tr:gt(0)').map(function(k, v){
            return { 
                firstName: $(v).find('.fname').val(),
                lastName: $(v).find('.lname').val(),
                email: $(v).find('.email').val(),
            }
        }).get();

    //update to show how you use the jQuery cache:

    //1. set the value (using the body tag in this example):
    $('body').data({ result: result });

    //2. fetch it somewhere else:
    var res = $('body').data('result');

});

不确定如何处理第一行。我在这种情况下跳过。您可以result[index]访问每一行。

您可能已经注意到,这会保存每次点击的所有行。如果您只想使用单击的行,请使用this指针。

http://jsfiddle.net/nwW4h/4/

答案 1 :(得分:1)

您的代码没有任何问题,唯一有错误的地方是警报,因为它没有在第一个单击按钮上定义

通过一点点更新看到这个小提琴

if(rowNum === 1)
    alert(arrTR1["Last"]);
else if(rowNum === 2)
    alert(arrTR2["Last"]);

fiddle

答案 2 :(得分:1)

您对动态命名变量所做的事实上是创建这些变量的数组(每个rowNum一个),但是给每个数组元素赋予它们各自的命名变量。

有一种更好的方法可以做到这一点。而不是生成一系列动态命名的变量,而是创建单个数组或对象。然后为要生成的每个动态命名变量添加元素或属性。

您的测试代码可能如下所示:

var arrTR = [];

var rowNum = 1;

arrTR[rowNum] = {
    First: 'Bob',
    Last: 'Roberts',
    email: 'me@there.com'
};

alert( arrTR[1].Last );

或者,您可以使用Johan的答案中提到的$.data做一些事情。但是,如果您使用纯JavaScript代码,请使用此处所述的单个数组,而不是多个动态命名的变量。

这样做有几个原因。它更清晰,更容易理解代码,当有大量条目时,它可能会更快,并且您根本不必污染全局命名空间。您可以在使用它的其他代码可见的任何范围内定义var arrTR = [];

数组和对象用于跟踪事物列表,因此请使用它们。

相关问题