2013-02-20 105 views
1

我今天在这里提出一个关键值对数组的问题。Javascript键值数组存储

我的HTML如下

<input type="checkbox" class="data" id="task_checked" value="1" email="[email protected]"> 
<input type="checkbox" class="data" id="task_checked" value="2" email="[email protected]"> 

我想下面的数据存储为一个数组象下面这样:

"1" => "[email protected]" 
"2" => "[email protected]" 

我的JavaScript目前如下:

var newTasksArr = new Array(); 

$("#task_checked:checked").each(function() { 
    var email = $(this).attr("email"); 
    var id = $(this).val(); 
    newTasksArr['id'] = email; 

}); 

也许我正在使用Jquery .each()错误,请问有人可以解释一下我的问题吗?

谢谢你的阅读。 此致敬礼。

回答

1

你几乎是正确的,你只需要删除'id'左右的引号,以便它使用id变量包含的值,而不是字面字符串'id'

您还应该使用对象({})而不是数组([])。

var newTasks = {}; 
$("#task_checked:checked").each(function() { 
    var email = $(this).attr("email"); 
    var id = $(this).val(); 
    newTasks[id] = email; 
}); 
+0

谢谢,作品完美。 – BaconJuice 2013-02-20 17:08:29

+0

@PeterOlson:请注意,“id”的值将是顺序整数。您对某个对象的建议更改可能会对BaconJuice带来意想不到的后果。比较:'var a = [],b = {}; a ['0'] ='x'; a ['1'] ='x'; b ['0'] ='x'; b ['1'] ='x';警报(则为a.length); alert(b.length);' – 2013-02-20 17:14:54

+0

@DavidHedlund他似乎特别要求键值存储,但看起来他可能来自PHP,它比JavaScript更像数组和键值词典。 – 2013-02-20 21:24:39

3

两个问题:

在Javascript中,数组可能只有顺序数字键。如果你想使用字符串作为键,你想要一个对象。

如果你想插入一个键值等于id的元素,那么你想要newTasksArr[id] = email;没有引号。

0

避免在标记中复制ID。以下内容应该有所帮助,但是您可能想要剔选jquery选择器以包含上下文。

var arr = {}; 

$('input:checked').each(function() { 
    var $t = $(this); 

    var email = $t.attr("email"); 
    if (!email) { 
     // you may wish to do something if email is missing 
    } 

    var id = $t.val(); 
    if (!id) { 
     // deal with the error 
    } 

    arr[id] = email; 
});