0

オブジェクトのプロパティにアクセスする必要があります:

var jsonobj= {
    "first": {
        "second": 120
    }
}

利用可能かどうかを確認する方法secondは? ここにチェックを入れるとjsonobj.hasOwnProperty()戻ります。false

secondの値を120 から 100に変更したい場合、どうすればそれを達成できますか? 任意の数の階層で機能するように、一般化されたソリューションを取得できますか?

編集: プロパティの名前がわからない場合はどうすればよいですか?

4

4 に答える 4

2

ネストされたプロパティ [キー] の [一意のパス] の存在を確認したい場合は、次の関数が役立ちます。

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;
}

@nnnnnnのコメント、特にその中のリンクをよく読んでください。

于 2012-09-10T06:33:25.923 に答える
0

使用typeof:

if(typeof jsonobj.first == 'undefined'){
    jsonobj.first = {};
}
if(typeof jsonobj.first.second == 'undefined'){
    jsonobj.first.second = {};
}    
jsonobj.first.second = 100;
于 2012-09-10T06:16:00.923 に答える
0

値を変更するには、「ドット」表記を使用できます。jsonobj.first.second = 100

于 2012-09-10T06:16:13.007 に答える
0
var jsonobj= {
              "first": {
                           "second": 120
                        }
           }

alert(jsonobj.first.second);

jsonobj.first.second = 100

alert(jsonobj.first.second);​
于 2012-09-10T06:17:12.617 に答える