簡體   English   中英

在Javascript中迭代對象

[英]Iterating over objects in Javascript

我有一個形式的obejct:

var test = {"2011":{"10":4,"9":9,"8":15,"7":11,"6":11,"5":13,"4":9,"3":5,"2":9,"1":4,"0":20},"2010":{"11":9,"10":23,"9":58}}

我想迭代這個,所以我可以打每年和每月組合。 我有:

var years = d3.keys(test),
    months = d3.range(12),
    data = [];

因此,作為一個Javascript新手,為了理智檢查我檢查years事情。

document.writeln(years)
2011,2010 

很酷,但是當我嘗試迭代years數組來從test提取數據時我會做我認為正確測試的元素,但元素丟失了:

for(var y in years) {
  document.writeln(y);
}
0,1

如何迭代years才能獲得實際元素( 2011,2010 )?

for in檢索索引/鍵(不是值)。

你需要修改你的循環,如下所示:

for(var y in years) {
  document.writeln(years[y]);
}

編輯 - 每個missingno的評論,使用for in迭代數組是一個壞主意

for(var i = 0, l = years.length; i < l; i++) {
  document.writeln(years[i]);
}

一些額外的信息......如果你對一個對象使用for / in循環,它也會迭代你的屬性鍵。 例如,

for(var y in test) {
  //This will yield, "2011" and then "2010"
  document.writeln(y);
}

for in循環的javascript for in不做你認為他們做的事情; 他們給你鑰匙,而不是元素

你要

for(var y in years) {
  document.writeln(years[y]);
}

因為你得到0,1回來,看起來幾年是一個真正的數組,所以你也可以這樣做

for(var i = 0; i < years.length; i++) {
    document.writeln(years[i]);
}

此外,您已經編輯了標題,但是有關術語的說明。 如果它是一個字符串,那么它是JSON。 如果它是一個對象,那么,它就是一個對象。 沒有“json對象”或“json數組”這樣的東西

據我所知, var y in years會給你的鑰匙數組years years[y]應該給你實際價值。

y將最終成為您訪問元素的索引,年份為0和1(因為年份是數組)。 因此,要訪問年份的值,請嘗試使用

writeln(years[y])

代替

writeln(y)

(恕我直言,Javascript通過這種方式有點反直覺)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM