2013-11-01 53 views
0

你好,我有一个相当奇怪的问题,没有多大意义。 我有一个变量是一个字符串,我想搜索一个对象的属性(也是一个对象)具有相同的名称。像这样:我想返回一个对象,但我得到一个字符串

var ObjectProperty; /// multi-layer object 
var PropertyName; //string 

如果在对象中存在与PropertyName匹配的内容,我想返回它。 示例代码:

OBJECT: 
Bird.Raven = { 
Name:"Raven", 
Color:"Black", 
} 
//Object 

Bird.Duck = { 
Name:"Duck", 
Color: "Gray", 
} 
//Object 

Bird.Cardinal = { 
Name:"Cardinal", 
Color: "Red", 
}//Object 
///ObjectProperty sample. 

主要我想在里面找“鸟”:

:我使用的,假设“n”是该属性名的变量我想搜索

var Cardinal = "Cardinal"; //string 
///PropertyName sample. 

当前功能

var searchBirds = function(n) { 
    for(var key in Bird) { 
    var keyName = key.toString(); 
    if(keyName == n){ 
    console.log("bird " + key + " has been found."); 
    console.log(typeof key);//RETURNS STRING 
    return key; 
    } 
    else{ 
    console.log(n + " could not be found") 
    }; 
    } 
    } 

为什么当它应该是一个对象时它返回一个字符串?我怎样才能让它作为一个对象返回键?怎么了?香草豆JavaScript首选。

感谢您的帮助,我希望这是有道理的!

回答

4

语句for(var key in Bird)遍历Bird对象上可枚举属性的名称。要获得该属性的,请执行Bird[key]

例子:

var key, birdObject; 
for (key in Bird) { 
    birdObject = Bird[key]; 
    console.log(key + ".Color = " + birdObject.Color); 
} 

...将输出

Raven.Color = Black 
Duck.Color = Grey 
Cardinal.Color = Red

...在no specified order(虽然几乎所有的发动机将在顺序做他们的属性添加到对象[提供没有属性名称都是数字,在这种情况下有更多的变化]   —但这是不是在规范)

+0

打我吧:) – wprl

+0

尽管我不太熟悉括号和键和属性(尽管我正在处理这个问题),但我不得不说这是神奇的!谢谢! – user2588440

+0

@ user2588440::-)对象属性有*名称*。我们可以通过两种方式给JavaScript引擎提供我们想要的属性的名称:或者通过在文本中直接输入它作为“标识符”,比如“a.height”中的“height”,或者通过给它作为一个字符串发送到引擎:'a [“height”]'。引擎知道我们正在做的是哪一个,因为我们使用带标识符的'.',但是我们在字符串中使用了'[...]'。这是做同样事情的两种不同方式。如果我们使用的是字符串,它可以是任何字符串,所以'a'“he”+“ight”]'工作,并且'key1 =“height”'然后''[key1]'工作。 –

相关问题