2015-06-16 2 views
2

У меня есть JavaScript Object массивов, как,Object.length неопределенными в JavaScript

var coordinates = { 
    "a": [ 
     [1, 2], 
     [8, 9], 
     [3, 5], 
     [6, 1] 
    ], 

     "b": [ 
     [5, 8], 
     [2, 4], 
     [6, 8], 
     [1, 9] 
    ] 
}; 

но coordinates.length возвращает неопределенное. Fiddle is here.

+4

Неудивительно? – Armand

+1

Объект не имеет длины, массивы –

+0

Какую длину вы ожидали? 2? 8? 16? – Bergi

ответ

4

Это потому, что coordinates является Object не Array, используйте for..in

var coordinates = { 
    "a": [ 
     [1, 2], 
     [8, 9], 
     [3, 5], 
     [6, 1] 
    ], 

    "b": [ 
     [5, 8], 
     [2, 4], 
     [6, 8], 
     [1, 9] 
    ] 
}; 

for (var i in coordinates) { 
    console.log(coordinates[i]) 
} 

или Object.keys

var coordinates = { 
    "a": [ 
    [1, 2], 
    [8, 9], 
    [3, 5], 
    [6, 1] 
    ], 

    "b": [ 
    [5, 8], 
    [2, 4], 
    [6, 8], 
    [1, 9] 
    ] 
}; 

var keys = Object.keys(coordinates); 

for (var i = 0, len = keys.length; i < len; i++) { 
    console.log(coordinates[keys[i]]); 
} 
4

coordinates является объект. Объекты в javascript по умолчанию не имеют свойства length. Некоторые объекты имеют свойство длины:

"a string - length is the number of characters".length 

['an array', 'length is the number of elements'].length 

(function(a, b) { "a function - length is the number of parameters" }).length 

Вы, вероятно, пытаетесь найти количество keys в вашем объекте, который может быть сделано с помощью Object.keys():

var keyCount = Object.keys(coordinates).length; 

Будьте осторожны, как length собственность может быть добавлена ​​к любому объекту:

var confusingObject = { length: 100 }; 
+2

Я не знал '(function() {}). Length' - количество аргументов. Спасибо за ваш обмен. –