Распознать последнюю итерацию в объекте Javascript - PullRequest
13 голосов
/ 18 декабря 2010

У меня есть объект, который я повторяю

for (el in object) {
// Some work here
}

Я хочу знать, когда последняя итерация внутри итерации, поэтому я могу сделать

for (el in object) {
// Some work here
if (last_iteration) {
// Do something
}
}

Есть ли простой способ сделать это?

Ответы [ 4 ]

12 голосов
/ 10 февраля 2015

Я знаю, что опоздал, но я просто наткнулся на это и исправил это так:

var i = 0;
var object = {a: 1, b: 2};
var length = Object.keys(object).length;

for(el in object){
    i++;
    var last = i === length; // true if last, false if not last
}
3 голосов
/ 18 декабря 2010

Вы можете сделать что-то вроде этого:

var first = true;
var prev;

for (var el in object) {
  // Some work here
  if (first) {
    first = false;
  } else {
    doSomething(prev, object[prev]);
  }
  prev = el;
}

if (prev !== undefined) { // There was at least one element
  doSomethingElse(prev, object[prev]); // Prev is now last of all elements
}

Это в случае, если вы хотите обработать все элементы, кроме последнего, одним способом (doSomething) и обработать последний элемент другим способом (doSomethingElse).

Если вы хотите обработать все элементы одним способом (doSomething) и хотите выполнить дополнительную обработку только для последнего элемента (doSomethingExtra), вы можете сделать:

var prev;

for (var el in object) {
  // Some work here
  doSomething(el, object[el]);
  prev = el;
}

if (prev !== undefined) { // There was at least one element
  doSomethingExtra(prev, object[prev]); // Prev is now last of all elements
}

Чтобы сделать его еще короче, вы можете сделать то же самое, что сделал Тёрок Габор в гисте, которую он предоставил , используя переменную el, то есть:

var el;

for (el in object) {
  // Some work here
  doSomething(el, object[el]);
}

if (el !== undefined) { // There was at least one element
  doSomethingExtra(el, object[el]); // El is now last of all elements
}

Надеюсь, это поможет.

0 голосов
/ 19 декабря 2010

, как уже говорилось, нет определенного порядка для свойств, поэтому последнее перечисленное свойство известно только после этого.

var object = { a: 'b', c: 42 };
for ( var string in object ) ;
alert( object[string] );  // last property name is still here 
0 голосов
/ 18 декабря 2010

Обратите внимание, что это будет работать, только если объект, по которому вы выполняете итерацию, является массивом (с числовыми ключами)

var a = [1,2,3,4,5];

for (i in a) {
  if(a[+i+1] === undefined) 
    console.log('the last one is: ' + a[i]);
}

Обратите внимание, что знак + перед i необходим, так как, если он опущен, он будет выполнять конкатенацию строк, ключи, приводящие к 01, 12, 23 и т. Д.

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