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

Accessing a Dynamically Named array in jQuery/javascript

本文关键字:动态 数组 访问 jQuery javascript      更新时间:2023-09-26

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

我得到表格行如下:

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

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

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

js小提琴

你对动态命名变量所做的本质上是创建一个这些变量的数组(每个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 = [];

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

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

看到这个小提琴,有一点更新

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

小提琴

这样的事情怎么样?

$('.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/