我在一个表中循环输入,没有任何表单标记。我正确地得到了这些值。我想用它们的值构建一个包含多个对象的对象。
我在期待什么?
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扩展方法有什么问题?为什么不合并对象?
如果我没弄错的话,你想要的实际上是不可能的。它类似于说你想要一个数组为a [1]得到5个值。
您可以使用数组而不是对象来实现它:
alarms = [{...},{...},{...}];
你写的是这个:
alarms['alarm'] = {...};
alarms['alarm'] = {...};
alarms['alarm'] = {...};
alarms['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);