Подтвердить что ты не робот

Признать последнюю итерацию в объекте Javascript

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

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

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

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

Любой простой способ сделать это?

4b9b3361

Ответ 1

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

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
}

Чтобы сделать это еще короче, вы можете сделать то же, что и Тёрок Габор в gist, который он предоставил, путем повторного использования переменной 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
}

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

Ответ 2

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

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

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

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 и т.д. Суб >

Ответ 4

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

var object = { a: 'b', c: 42 };
for ( var string in object ) ;
alert( object[string] );  // last property name is still here