您好我有一个相当奇怪的问题,没有多大意义。 我有一个变量,它是一个字符串,我想搜索一个具有相同名称的对象(也是一个对象)的属性。像这样:
var ObjectProperty; /// multi-layer object
var PropertyName; //string
如果与Object中的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.
Key我想在“Bird”中找到:
var Cardinal = "Cardinal"; //string
///PropertyName sample.
我正在使用的当前函数,假设'n'是我要搜索的PropertyName变量:
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")
};
}
}
为什么它应该是一个对象时返回一个字符串?如何让它作为对象返回键?怎么了? Vanilla Javascript首选。
感谢您的帮助,我希望这是有道理的!
答案 0 :(得分: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 中(尽管几乎所有引擎都会按照属性添加到对象的顺序执行它们[前提是没有属性名称都是数字,在这种情况下会有更多变化] - 但在规范中不 。