2013-02-20 4 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

+0

@PeterOlson: обратите внимание, что значения «id» будут последовательными целыми числами. Ваше предлагаемое изменение объекта может иметь последствия, которые являются неожиданными для BaconJuice. Сравните: 'var a = [], b = {}; a ['0'] = 'x'; a ['1'] = 'x'; b ['0'] = 'x'; b ['1'] = 'x'; оповещения (a.length); alert (b.length); ' –

+0

@DavidHedlund. Он, похоже, довольно конкретно запрашивал хранилище с ключом, но похоже, что он может исходить из PHP, который объединяет массивы и словари для ключевого слова даже больше, чем JavaScript. –

3

два вопроса:

В JavaScript массив может иметь только последовательные, цифровые клавиши. Если вы хотите использовать строки как ключи, вам нужен объект.

Если вы хотите вставить элемент с ключом, равным значению id, тогда вы хотите newTasksArr[id] = email; без кавычек.

0

Избегайте дублирования идентификаторов в вашей разметке. Следующее должно помочь, однако, возможно, вы захотите tweek селектор 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; 
}); 
Смежные вопросы