2013-11-01 55 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]'工作。 –

相關問題