2013-02-20 128 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; 
});