2013-12-20 3 views
1

Я пытаюсь обновить значения массива, но вместо этого получаю null. Вот как я заполнить массив:Обновление значений ассоциативного массива jquery

var id_status = []; id_status.push({ id:1, status: "true" }); 

Поэтому в основном я заканчиваю создание объекта JSON с этим массивом, но как обновить отдельные значения с помощью цикла по массиву? Вот то, что я пытаюсь сделать:

var id = $(this).attr("id"); id_status[id] = "false"; 

Я хочу, чтобы иметь возможность получить доступ к элементу в массиве и обновить свой статус после получения идентификатора строки.

+2

В jQuery нет массивов, а в javascript нет ассоциативных массивов? – adeneo

+0

Возможный дубликат [Найти объект по id в массиве объектов javascript] (http://stackoverflow.com/questions/7364150/find-object-by-id-in-array-of-javascript-objects) – leaf

+0

Кажется, что вы путаете идентификаторы и индексы. Во-первых, прочитайте вопрос выше, чтобы найти объект с соответствующим id, а затем обновите объект следующим образом: 'foundObject.status = false'. – leaf

ответ

0

Эта функция либо обновит существующее состояние, либо добавит новый объект с соответствующим статусом и идентификатором.

var id_status = []; 
id_status.push({ id:1, status: true }); //using actual boolean here 
setStatus(1, false); 
setStatus(2, true); 

//print for testing in Firefox 
for(var x = 0; x < id_status.length; x++){ 
    console.log(id_status[x]); 
} 

function setStatus(id, status){ 
    //[].filter only supported in modern browsers may need to shim for ie < 9 
    var matches = id_status.filter(function(e){ 
     return e.id == id; 
    }); 
    if(matches.length){ 
     for(var i = 0; i < matches.length; i++){ 
      matches[i].status = status; //setting the status property on the object 
     } 
    }else{ 
     id_status.push({id:id, status:status}); 
    } 
} 

JS Fiddle:http://jsfiddle.net/rE939/

+0

Ответ работал отлично, спасибо Кевину. – CodeSlave

+0

@ user2835306 Пожалуйста, найдите минутку, чтобы прочитать это: http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 :) – leaf

0

Если id будет уникальным, сделать id_status объект как этот

var id_status = {}; 
id_status[1] = "true"; //Boolean value in String?!? 

доступ к нему с id непосредственно получить статус

console.log(id_status[1]); 

Так как объекты похожи на хэш-таблицу, доступ к элементам будет быстрее.

1
var id_status = {}; // start with an objects 

id_status['1'] = {status: true }; // use keys, and set values 

var id = this.id; // assuming it returns 1 

id_status[id].status = false; // access with the key 
Смежные вопросы