【发布时间】:2012-11-12 14:25:51
【问题描述】:
我正在使用 mongodb 和 ajax 调用来检索数据。当它转向 javascript 对象时,我用来生成 html 的属性有时不存在。 看看这个电话:
$.ajax({
url: 'api/v1/mention/'+id,
type: "GET",
dataType: "json",
data : {login : "demo"},
success: function(mention) {
display_mention_text(mention.texto);
}
});
在这种情况下,我调用的是mention.texto,但可以是mention.picture 或任何属性。有时它未定义并导致应用崩溃。
此方法调用对象的属性,如果未定义,则返回空字符串。 调用该方法的一些例子(第一个是对象,另一个是属性):
get_property(mention,"text")
get_property(mention,"user","name")
get_property(mention,"picture")
方法定义如下:
function get_property(obj){
var args = Array.prototype.slice.call(arguments),
obj = args.shift();
if (checkNested(obj,args)) {
//what should I do here?
} else{
//the property is undefined and returns ""
"";
};
}
//check if a object has N levels of propertys
function checkNested(obj /*, level1, level2, ... levelN*/) {
var args = Array.prototype.slice.call(arguments),
obj = args.shift();
for (var i = 0; i < args.length; i++) {
if (!obj.hasOwnProperty(args[i])) {
return false;
}
obj = obj[args[i]];
}
return true;
}
在第一个方法get_property中,如果属性确实存在,我怎么称呼它?? 我会将对象和他的属性作为一个数组,例如: 对象
params = ["user","name"]
但我不能像下面这样调用:
object.["user","name"]
【问题讨论】:
-
用来自
checkNested函数的for循环替换get_property函数中的if语句。然后不返回true或false,而是返回找到的值或""。 -
但是函数 checkNested 是返回 true 或 false,而不是值。
-
我发布了an answer,这符合我的解释。但同样,您替换整个
if语句,并将来自另一个函数的for语句置于其位置。然后更改返回值,这样您就不再返回true或false。
标签: javascript object