Javascript / JQuery - Как мне найти размер этого массива объектов? - PullRequest
1 голос
/ 22 августа 2011

У меня есть этот код для перебора массива объектов:

for (vehicleIndex in scenes[sceneID].vehicles) {
  vehicleID = scenes[sceneID].vehicles[vehicleIndex];
  ...
}

но мне нужно знать, как определить количество элементов, через которые выполняется итерация, чтобы в конечном элементе я мог выполнить определенную функцию. Как мне это сделать?

Ответы [ 5 ]

2 голосов
/ 22 августа 2011

Пример в ES5:

Object.keys( scenes[sceneID].vehicles ).forEach(function( vehicle, index, arr ) {
    if( index === arr.length - 1 ) {
        // do something on last entry
    }
});

Даже если «последний» просто означает последний элемент, который был зациклен. Поскольку в объекте Javascript есть определенный порядок (они неупорядочены). Тем не менее, мы можем отсортировать имена ключей объекта вручную, просто добавив .sort() перед .forEach()

1 голос
/ 22 августа 2011
var arraySize = scenes[sceneID].vehicles.length;
var i;
var currentItem;
for (i = 0; i < arraySize; i++) {
  currentItem = scenes[sceneID].vehicles[i];
  if (i == arraySize - 1) {
    // do something special
  } else {
     // do something not so special ;-)
  }
}
0 голосов
/ 22 августа 2011
for (vehicleIndex in scenes[sceneID].vehicles) {
  vehicleID = scenes[sceneID].vehicles[vehicleIndex];
  ...
}
doSomethingWithLastItem(vehicleId);

Поскольку JS не имеет области видимости блока, ко времени завершения цикла vehicleId будет идентификатором последнего элемента.

В общих чертах вы можете получить размер массива, обратившись к.length собственность.Вы также можете получить размер объекта, используя Object.keys(obj).length.

0 голосов
/ 22 августа 2011

Используйте это, чтобы найти длину:

scenes[sceneID].vehicles.length

length - это встроенное свойство в массивах. Однако, если вы хотите проверить последний элемент, вы должны проверить

scenes[sceneID].vehicles.length - 1

как массивы индексируются с нуля.

Кроме того, вы не должны использовать for...in для зацикливания массивов - если кто-то расширит Array.prototype (или хуже, Object.prototype), вы не будете счастливы. Используйте обычный цикл for (который также позволяет легко использовать последний элемент):

var len = scenes[sceneID].vehicles.length;
for (var vehicleIndex = 0; vehicleIndex < len; vehicleIndex++) {
  vehicleID = scenes[sceneID].vehicles[vehicleIndex];
  //...
}
//Do something with the final item here
//Similar to this: itemFunc(vehicleID);

Подробнее см. в этом вопросе .

0 голосов
/ 22 августа 2011

scene [sceneID] .vehicles должен иметь свойство length.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...