Javascript 访问对象的嵌套属性
我必须访问对象上的属性:Javascript 访问对象的嵌套属性,javascript,jquery,Javascript,Jquery,我必须访问对象上的属性: var jsonobj= { "first": { "second": 120 } } 如何检查second是否可用jsonobj.hasOwnProperty()如果我们选中此处,则返回false 如果我想将second的值从120更改为100,我该如何实现? 我可以得到一个通用的解决方案,这样它可以适用于任意数量的层次结构吗 编辑: 如果我不知道属性的名称怎么办?使用typeof: if(typeof jsonobj.first =
var jsonobj= {
"first": {
"second": 120
}
}
如何检查second
是否可用jsonobj.hasOwnProperty()
如果我们选中此处,则返回false
如果我想将second
的值从120更改为100,我该如何实现?
我可以得到一个通用的解决方案,这样它可以适用于任意数量的层次结构吗
编辑:
如果我不知道属性的名称怎么办?使用
typeof
:
if(typeof jsonobj.first == 'undefined'){
jsonobj.first = {};
}
if(typeof jsonobj.first.second == 'undefined'){
jsonobj.first.second = {};
}
jsonobj.first.second = 100;
要更改该值,可以使用“点”表示法-因此请尝试:
jsonobj.first.second=100
如果要检查嵌套属性[key]的[唯一路径]是否存在,此函数可能会有帮助:
var jsonobj= {
"first": {
"second": 120
}
}
alert(jsonobj.first.second);
jsonobj.first.second = 100
alert(jsonobj.first.second);
function keyPathExists(obj,keypath){
var keys = keypath.split('.'), key, trace = obj;
while (key = keys.shift()){
if (!trace[key]){
return null
};
trace = trace[key];
}
return true;
}
//usages
var abcd = {a:{b:{c:{d:1}}}};
keyPathExists(abcd,'a.b.c.d'); //=> 1
keyPathExists(abcd,'a.b.c.d.e'); //=> null
if (keyPathExists(abcd,'a.b.c.d')){
abcd.a.b.c.d = 2;
}
请仔细阅读s的评论,尤其是其中提供的评论。
jsonobj.first.second=100代码>就可以了。对于一个通用的解决方案,您如何看待重复的属性名称?对象可以有多个属性,所有这些属性都引用其他对象,每个对象都有自己的second
属性,或者可以在多个级别使用相同的属性名称,例如obj.first.second.second
与obj.first.second
不同-那么您将返回哪个属性?另外,这不是JSON,它是一个对象(或嵌套对象)——@nnnnnn:thanx代表ur链接。我刚刚理解了json和object literal之间的区别!:)请注意,这个问题与JSON完全无关。您似乎混淆了JavaScript对象文本(JavaScript语言语法的结构)和JSON(一种独立于语言的数据交换格式,如XML或CSV)。我将相应地编辑您的问题。另请参见:。如果我不知道json对象的结构,该怎么办?如果不知道结构,您将如何更改属性?。。。如果在对象树中的其他地方有另一个同名属性怎么办如果未定义first
怎么办?相同,请检查未定义、已更新的codethanx。你的方法对我有用!:)