Расширить объект JavaScript - PullRequest
2 голосов
/ 23 июня 2011

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

Чего я жду?

alarms = { alarm: { status_id: '1', alarm_name: 'Critic', user_id_created: '30021061' }, alarm: { status_id: '1', alarm_name: 'Middle', user_id_created: '30021061' }, alarm: { status_id: '1', alarm_name: 'Bottom', user_id_created: '30021061' }, ... };

Что я получаю? Последний объект в цикле.

alarms = { alarm: { status_id: '1', alarm_name: 'Bottom', user_id_created: '30021061' } };

Вот код:

var alarms = {}
$('.new_alarm').each(function() {
    var status_id = $(this).children('.status').children().val(),
        alarm_name = $(this).children('.data').children('input[name="alarm_name"]').val(),
        user_id = $('#user_id').text();
        objAux = {};

    if(alarm_name) {            
        objAux = {
            alarm: {
                'status_id': status_id,
                'alarm_name': alarm_name,
                'user_id_created': user_id
            }
        };
    }

    alarms = $.extend(true, alarms, objAux);          
});

Что не так с методом расширения jQuery? Почему не происходит слияние объектов?

Ответы [ 2 ]

4 голосов
/ 23 июня 2011

Если я не ошибаюсь, то, что вы хотите, на самом деле невозможно.Это все равно что сказать, что вы хотите, чтобы массив имел 5 значений для a [1].

Вы можете реализовать это, используя массив вместо объекта:

alarms = [{...},{...},{...}];

То, что вы пишете, на самом деле таково:

alarms['alarm'] = {...};
alarms['alarm'] = {...};
alarms['alarm'] = {...};
alarms['alarm'] = {...};
1 голос
/ 23 июня 2011

Вы переопределяете одно и то же свойство "alarm" на каждой итерации.

Вы должны создать массив, а затем push() значения в конце массива.

var alarms = [
      {name: 'alarm1'}
    , {name: 'alarm2'}
    , {name: 'alarm3'}
];


var new_alarms = [];


$(alarms).each(function() {
    console.log(this);
    new_alarms.push(this);
});


console.log(alarms, new_alarms);

См .: http://jsfiddle.net/y22Hk/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...