你能解释一下JSON对象是如何存储在Javascript对象中的吗?

时间:2018-01-03 04:18:50

标签: javascript json

这里我正在迭代存储在javascript对象中的JSON对象并打印其中的一些值。

 database.ref().once("value", function (snap) {
    //store javascript object containing JSON objects in scores variable.
    scores = snap.val();

    for(var key in scores){
        console.log(scores[key].Name);
    }
});

enter image description here

得分对象看起来像这样。

enter image description here

for循环如何检索每个JSON对象中的键并存储在名为“key”的变量中?

由于分数不是数组而是javascript对象,for循环如何工作?

例如scores[1].Name无效。所以,它不是基于索引的。

2 个答案:

答案 0 :(得分:2)

在您的示例中,您有一个看起来像这样的对象:

var obj = {
  'key1': {name: 'Josh', score: 9},
  'key2': {name: 'July', score: 30},
  'key3': {name: 'Joy', score: 18},
  'key4': {name: 'Barbara', score: 50},
};

执行for (var key in obj) {...}将遍历初始对象的所有。在该示例中,这将是['key1', 'key2', 'key3', 'key4']

您说得对,只能通过索引访问数组项。对于对象,可以通过键(字符串)访问子对象。

以下工作:

// Directly when you know the key name
console.log(obj.key1.name); // Will print out 'Josh' 

// Using a variable when the key name is stored in a variable
var customKey = 'key1';
console.log(obj[customKey].name); // Will print out 'Josh' 

在您的初始示例中,您使用for ... in结构遍历对象键,然后按键访问嵌套对象。

您可以使用以下示例验证我的意思:

database.ref().once("value", function (snap) {
    //store javascript object containing JSON objects in scores variable.
    scores = snap.val();

    for(var key in scores){
        console.log(key); // See what's inside your key variable
        console.log(scores[key].Name);
    }
});

答案 1 :(得分:1)

for...in语句迭代给定对象的enumerable properties

假设您有以下对象:

var o = { 
  a: 1, 
  b: 2, 
  c: { 
    d: 3 
  } 
};

这样做的:

for (var key in o) console.log(key, o[key]);

将打印:

a 1
b 2
c { d: 3 }

我认为重要的是要记住for...in语句也会遍历对象的inherited properties

这样做的:

o.__proto__.x = 4;
for (var key in o) console.log(key, o[key]);

将打印:

a 1
b 2
c { d: 3 }
x 4

如果您只想直接遍历属于该对象的属性而不是原型链,您可以使用Object.keys()

var o = { 
  a: 1, 
  b: 2, 
  c: function () {}
};

o.__proto__.x = 4;
o.__proto__.y = function () {};

var keys = Object.keys(o);

for (var i = 0; i < keys.length; i++) console.log(keys[i], o[keys[i]]);

上面的代码打印:

a 1
b 2
c function () {} //functions are also enumerable