我有一个对象'obj'。假设我们暂时不知道它的来源。
如果我愿意
console.log(JSON.stringify(obj));
我得到
[{"foo":101,"bar":1,"foobar":0},{"foo":102,"bar":1,"foobar":0}]
这是什么物体?
我要问我看到两种我不理解的行为:
1)它似乎是一个对象数组(?),所以我希望
console.log(obj[0])
返回:
{"foo":101,"bar":1,"foobar":0},{"foo":102,"bar":1,"foobar":0}
相反,它返回:
{"foo":101,"bar":1,"foobar":0}
2)我希望
for (var somevar in obj){
console.log(JSON.stringify(somevar));
}
返回
first step: {"foo":101,"bar":1,"foobar":0}
second step: {"foo":102,"bar":1,"foobar":0}
相反,它返回
first step: "0"
second step: "1"
有人可以解释这个对象的性质吗,为什么这两种情况(尤其是第二种情况)返回这样的结果?
答案 0 :(得分:2)
obj
是数组或对象。它在索引0
和1
上有两个对象,这就是为什么当您执行console.log(obj[0]);
时它只给您{"foo":101,"bar":1,"foobar":0}
的原因。索引为0
的对象。
对于第二个问题,for (var somevar in obj)
遍历obj
的每个键,由于它是数组数据类型,所以数组的键始终是其index
值。这就是为什么您在控制台中获得0
和1
的原因。为此,您需要在var somevar of obj
中进行for
,然后再考虑value
数组中的key
而不是obj
。
var obj = [{"foo":101,"bar":1,"foobar":0},{"foo":102,"bar":1,"foobar":0}];
for (var somevar of obj){
console.log(JSON.stringify(somevar));
}
答案 1 :(得分:2)
对于您的特定第一个问题-当我们通过其索引访问数组时,它将返回该特定索引的值。例如
var first_array = ['A', 'B', 'C', 'D'];
var secound_array = [{"foo":101,"bar":1,"foobar":0},{"foo":102,"bar":1,"foobar":0}];
使用索引为array_variable[index]
的Syntex访问数组数据,其中index为数字值。例如
first_array[0] // output = A
first_array[2] //output = C
secound_array[0] // output = {"foo":101,"bar":1,"foobar":0}
这是您的第一个问题解决方案,因为您要按数组索引访问元素。数组的索引从0开始。
对于您的第二个问题,for..in
语句使用索引而不是值进行迭代。如果我像下面的代码那样写-
for (var somevar in secound_array){
console.log(JSON.stringify(somevar));
}
输出为
first step: 0
second step: 1
如果要输出
first step: {"foo":101,"bar":1,"foobar":0}
second step: {"foo":102,"bar":1,"foobar":0}
您需要编写如下代码-
for (var somevar of secound_array){
console.log(JSON.stringify(secound_array[somevar])); // here somevar is index of the item
}
有关更多信息,click here 您还可以检查for...of。例如
for (let o of secound_array) {
console.log(o)
}
答案 2 :(得分:1)
第一个问题:
您的数组中有两个元素:
var obj =
[
{"foo": 101, "bar":1, "foobar": 0}, //first element at index 0
{"foo": 102, "bar":1, "foobar": 0} //second element at index 1
];
console.log(obj[0]);
如果您写console.log(obj[0]);
,则一次获取第一个元素而不是2个元素,因为在索引0
处只有一个元素。 这是正确的。
第二个问题:
var obj = [{"foo": 101, "bar":1, "foobar": 0},{"foo": 102, "bar":1, "foobar": 0}];
for (var somevar in obj){
console.log(JSON.stringify(somevar));
}
这放在控制台中:
第一步:“ 0”
第二步:“ 1”
这也是正确的。出于您的需要,您必须使用for of
循环,而不要使用for in
,因为for in
为您提供了元素的索引,并且不是像for of
这样的元素。
检查for in
和for of
之间的区别:
var arr = [ 3, 5, 7 ];
for(var i in arr) {
console.log(i); // 0, 1, 2
}
console.log('-----');
for(var i of arr) {
console.log(i); // 3, 5, 7
}
答案 3 :(得分:0)
数组是JavaScript中的对象。因此,完全可以预期该行为。索引是数组的键。
所以当你这样做
console.log(obj[0])
您只需访问数组中的第一项
然后在第二种情况下,您只需注销字符串化的键“ 0”和“ 1”