2013-06-03 33 views
3

我想使用.push()方法創建javascript對象並創建Key Value Pair。 我試過了,但它不起作用。使用.push()方法的Javascript對象

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

任何解決方案?

回答

7

你似乎想這樣的:

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

幾個意見:

  • 不使用$(this).attr('id')時,你可以使用this.id
  • 你必須初始化數組你推到它之前
  • 你不能直接創建一個對象字面與動態屬性名稱,則必須創建對象的第一

另一種更清潔的解決方案是

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

Demonstration

請注意,這將創建一個n陣列。如果你想要的是一個獨特的對象,使用此:

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

Demonstration

+0

「不使用$(本)。 attr('id')when you use this.id「same for value :) –

+1

@roasted是的,但只是因爲它是一個'input'。對於某些元素來說,這不是完全相同的行爲,這就是爲什麼我不願意改變它。 –

+0

好點! Thx –

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() }); 
}); 
+0

不,您不能在JavaScript中執行此操作。 –

+0

不適用於對象鍵,請參閱@ dystroy的答案 –