Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在jQuery/javascript中访问动态命名数组_Javascript_Jquery_Arrays - Fatal编程技术网

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

在jQuery/javascript中访问动态命名数组,javascript,jquery,arrays,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[arrayN

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

因此,我得到表行:

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"]);
警报不起作用,所以我做错了什么

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


像这样的怎么样

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


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

看到这把小提琴了吗

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

使用动态命名变量所做的工作本质上是创建这些变量的数组(每个
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=[]
位于对使用它的其他代码可见的任何范围内


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

不要污染窗口对象。如果需要全局变量,请使用jQuery的
数据
方法,并将其存储在
$.cache
中。您提供的小提琴可以工作,但只有在某个点单击第一行的按钮以创建
arrTR1
变量时,第四个警报才会工作。但是为什么要创建这样的全局变量呢?如果你解释了你想要达到的目标,别人会提出更好的方法。顺便说一句:不要使用非数字属性的数组,你应该使用对象:
window[arrayName]={}
@Johan如果不要求太多,你介意更新你的答案来显示你使用jQuery的
data
方法和存储在
$.cache
中的意思吗?@当你使用
data
方法时,你会胡言乱语,jQuery在内部使用
$.cache
。因此,您需要知道的就是如何使用
数据
方法。我已经更新了我的答案