使用for-in循环获取特定属性

时间:2014-01-14 13:00:51

标签: javascript for-in-loop

'for in'循环是仅限于显示属性名称及其第一个值,还是有一种方法可以在其值内查看?例如,

如果我想检查'no1'对象里面的'titles'属性值,它位于'favBooks'对象中,我可以用for循环吗?

我正在尝试这样的事情:

var favBooks = {
  no1:{Title:'Sidhartha',Author:'Hesse'},
  no2:{Title:'Cosmos',Author:'Sagan'},
  no3:{Title:'Idiot',Author:'Dostojevski'}
}

然后只调用with中的标题:

for(t in favBooks) console.log(favBooks[t.title]);

..但它返回undefined。

我知道还有其他方法可以做到这一点,但我的问题是:这是'for in'的限制 - 只返回属性名称及其第一个值,或者你可以深入了解属性,如果是 - 怎么样?

由于

3 个答案:

答案 0 :(得分:3)

for(t in favBooks) console.log(favBooks[t].Title);

答案 1 :(得分:1)

问题在于     的console.log(favBooks [t.title]);`

除了具有“title”而不是“Title”(javascript区分大小写)之外,属性“Title”不是对象favBooks的索引。您可以使用favBooks [“no1”]对其进行索引(我没有尝试过),但你绝对可以使用favBooks.no1

例如

favBooks.no1.Title would be "Sidhartha".

所以我认为最后一行应该是:

for(t in favBooks) console.log(favBooks[t].Title); // logs the Title property

下面的函数运行一个javascript对象,并对其进行字符串表示。如果您提醒结果,它将显示对象的结构。 它还用

遍历对象
for (X in el)

其中el是任何对象 - 无论是html doc中的DIV元素还是{a:b,c:d}类型对象。

或许这会有所帮助吗?

function dump(el) {
var s=""; //    
for (X in el) { 
      if (el[X]) {var sX=el[X].toString(); s+=X+": "+el[X] + "<br>\n"} 
    }
return s
}

答案 2 :(得分:1)

也许你想要更接近PHP foreach ($array as $key => $value)的东西:

var favBooks = [                      // <-- note this is now an array
  {Title:'Sidhartha',Author:'Hesse'},
  {Title:'Cosmos',Author:'Sagan'},
  {Title:'Idiot',Author:'Dostojevski'}
]

favBooks.forEach (function(elt){ console.log (elt.Title); })

请注意这不适用于IE8 -