74

Javascriptのみで各オブジェクトの名前と値を取得するにはどうすればよいですか?

4

4 に答える 4

147

オブジェクトのプロパティにアクセスするには、次の 2 つの方法があります。

var obj = {a: 'foo', b: 'bar'};

obj.a //foo
obj['b'] //bar

または、動的に実行する必要がある場合:

var key = 'b';
obj[key] //bar

まだオブジェクトとして持っていない場合は、変換する必要があります。

より複雑な例として、ユーザーを表すオブジェクトの配列があるとします。

var users = [{name: 'Corbin', age: 20, favoriteFoods: ['ice cream', 'pizza']},
             {name: 'John', age: 25, favoriteFoods: ['ice cream', 'skittle']}];

2 番目のユーザーの age プロパティにアクセスするには、 を使用しますusers[1].age。最初のユーザーの 2 番目の "favoriteFood" にアクセスするには、 を使用しますusers[0].favoriteFoods[2]

もう一つの例:obj[2].key[3]["some key"]

これは、2 という名前の配列の 3 番目の要素にアクセスします。次に、その配列の 'key' にアクセスし、その 3 番目の要素に移動してから、プロパティ name にアクセスしますsome key


Amadan が指摘したように、異なる構造をループする方法についても議論する価値があるかもしれません。

配列をループするには、単純な for ループを使用できます。

var arr = ['a', 'b', 'c'],
    i;
for (i = 0; i < arr.length; ++i) {
    console.log(arr[i]);
}

オブジェクトをループするのはもう少し複雑です。オブジェクトがプレーン オブジェクトであることが絶対に確実な場合は、プレーンfor (x in obj) { }ループを使用できますが、hasOwnPropertyチェックを追加する方がはるかに安全です。これは、オブジェクトに継承されたプロパティがないことを確認できない場合に必要です。(また、コードを少し将来的に証明します。)

var user = {name: 'Corbin', age: 20, location: 'USA'},
    key;

for (key in user) {
    if (user.hasOwnProperty(key)) {
        console.log(key + " = " + user[key]);
    }
}    

(あなたが使用しているJS 実装がconsole.log.alert

于 2012-12-25T06:30:42.890 に答える
20

githubで Douglas Crockford による JSON パーサーを試してください。以下に示すように、String 変数から JSON オブジェクトを簡単に作成できます。

var JSONText = '{"c":{"a":[{"name":"cable - black","value":2},{"name":"case","value":2}]},"o":{"v":[{"name":"over the ear headphones - white/purple","value":1}]},"l":{"e":[{"name":"lens cleaner","value":1}]},"h":{"d":[{"name":"hdmi cable","value":1},{"name":"hdtv essentials (hdtv cable setup)","value":1},{"name":"hd dvd \u0026 blue-ray disc lens cleaner","value":1}]}'

var JSONObject = JSON.parse(JSONText);
var c = JSONObject["c"];
var o = JSONObject["o"];
于 2012-12-25T06:35:17.283 に答える
8

はい、JSコードは次のとおりです。

var data = JSON.parse('{"c":{"a":{"name":"cable - black","value":2}}}')

for (var event in data) {
    var dataCopy = data[event];
    for (data in dataCopy) {
        var mainData = dataCopy[data];
        for (key in mainData) {
            if (key.match(/name|value/)) {
                alert('key : ' + key + ':: value : ' + mainData[key])
            }
        }
    }
}​

ここでフィドル

于 2012-12-25T06:55:11.213 に答える
5
var yourobj={
"c":{
    "a":[{"name":"cable - black","value":2},{"name":"case","value":2}]
    },
"o":{
    "v":[{"name":"over the ear headphones - white/purple","value":1}]
},
"l":{
    "e":[{"name":"lens cleaner","value":1}]
},
"h":{
    "d":[{"name":"hdmi cable","value":1},
         {"name":"hdtv essentials (hdtv cable setup)","value":1},
         {"name":"hd dvd \u0026 blue-ray disc lens cleaner","value":1}]
}}
  • まず第一に、整理することをお勧めします
  • トップレベルの参照は、a..v...など以外のより便利な名前である必要があります
  • ov、oieでは、1つのjsonエントリであるため、配列[]は必要ありません。

私の解決策

var obj = [];
for(n1 in yourjson)
    for(n1_1 in yourjson[n])
        for(n1_2 in yourjson[n][n1_1])
            obj[n1_2[name]] = n1_2[value];

承認されたコード

for(n1 in yourobj){
    for(n1_1 in yourobj[n1]){
    for(n1_2 in yourobj[n1][n1_1]){
            for(n1_3 in yourobj[n1][n1_1][n1_2]){
      obj[yourobj[n1][n1_1][n1_2].name]=yourobj[n1][n1_1][n1_2].value;
            }
    }
 }
}
console.log(obj);

結果

* []メソッドまたはドット表記を使用する場合は、distinguishedaccessorsizeを使用する必要があります

証明する

于 2012-12-25T06:49:53.403 に答える