![](/img/trans.png)
[英]Why can't I set this variable in an object with an object with javascript?
[英]Why can't I build this Javascript object?
我有一個對象我正在嘗試從另一個對象填充(也就是說,迭代一個返回對象來生成一個只包含原始選定值的對象)。 我的代碼看起來像這樣:
var collect = {};
function getHistoricalData(username){
$.getJSON("http://url/" + username + ".json?params",
function(data){
for (var i=0; i < data.length; i++) {
console.log(i);
collect = { i : {text : data[i].text}};
$("#wrap").append("<span>" + data[i].text + "</span><br />");
};
console.log(collect);
});
}
所以我使用Firebug進行調試,這就是我所知道的:
console.log(i);
按預期顯示數字1-20 當我在最后記錄collect
對象時,它的結構如下: var collect = { i : {text : "the last iteration's text"}};
因此,增量器“應用”到data [i] .text並返回文本值,但它沒有按照我的預期進行,這是創建了collect對象的新成員; 它只是覆蓋collect.i
20次並留下最后一個值。
我需要使用不同的語法來分配對象成員嗎? 我嘗試了collect.i.text =
並collect[i].text =
,錯誤是我嘗試的任何內容都是未定義的。
我很想知道這里發生了什么,所以解釋越深入越好。
謝謝!
你最終只在對象中看到一個屬性的原因是你沒有在每次循環迭代中擴充它 - 你要覆蓋它。
collect = { i : {text : data[i].text}};
這說:創建一個具有一個屬性的對象, i
,其值是具有一個屬性, text
另一個對象,並將其分配給變量collect
。 您想要做的是為i
每個值設置現有collect
對象的屬性,其中i
是屬性的名稱。
為了創建一個動態設置名稱的對象屬性,必須使用數組樣式語法,如下所示: collect[i]
。 我不認為你可以像你嘗試過的那樣混合數組語法和對象文字語法。 試試這個(免責聲明,未經測試):
collect[i] = { text: data[i]["text"] };
collect[i] = {text : data[i].text};
如果你使用collect[i].text
,因為在賦值之前collect[i]
不存在,它將返回undefined
,它沒有text
屬性。
也:
collect.i
表示collect["i"]
。 這與collect[i]
完全不同。 .push
。 如您所知,問題出在這一行:
collect = { i : {text : data[i].text}};
循環的每次迭代,您正在擦除collect對象並為其指定一個新對象作為值。 這就是為什么最后它只顯示最后一次迭代。
嘗試這個:
collect[i] = {text : data[i].text};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.