JavaScript对象中的.push()方法

3

我想使用.push()方法创建JavaScript对象,并创建键值对。我尝试过了,但不起作用。

$("input[name^=ang_nama]").each(function() {
   arr_nama.push($(this).attr('id'):$(this).val());
});

有什么解决方案吗?
3个回答

8
你似乎想要这个:

您需要的是:

var arr_nama = [];
$("input[name^=ang_nama]").each(function() {
   var obj = {};
   obj[this.id] = $(this).val();
   arr_nama.push(obj);
});

以下是一些观察:

  • 当您可以使用this.id时,请不要使用$(this).attr('id')
  • 在推入数组之前,您必须初始化数组
  • 您不能直接使用动态属性名称创建对象文本,必须先创建对象

另一个更清晰的解决方案是

var arr_nama = $("input[name^=ang_nama]").map(function() {
   var obj = {};
   obj[this.id] = $(this).val();
   return obj;
}).get();

演示

请注意,这将创建一个数组。如果您想要的是唯一的对象,请使用以下方法:

var arr_nama = {};
$("input[name^=ang_nama]").each(function() {
   arr_nama[this.id] = $(this).val();
});

Demonstration


当你能够使用this.id时,请不要使用$(this).attr('id')。同样适用于value :) - A. Wolff
1
@roasted 是的,但只是因为它是一个“输入”。对于某些元素来说,它的行为并不完全相同,这就是我不愿意改变它的原因。 - Denys Séguret

1

尝试

var obj = {};
obj[$(this).attr('id')] = $(this).val();
arr_nama.push(obj);

0

试试这个,在推送时添加花括号

$("input[name^=ang_nama]").each(function() {
     arr_nama.push( { $(this).attr('id'):$(this).val() } );
});

不,你不能在JavaScript中这样做。 - Denys Séguret

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接