识别Javascript对象中的最后一次迭代

时间:2010-12-18 15:36:26

标签: javascript loops object

我有一个我正在迭代的对象

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

我想知道迭代内部的最后一次迭代是什么时候,所以我可以做到

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

任何直截了当的方式吗?

4 个答案:

答案 0 :(得分:12)

我知道我已经迟到了,但我刚刚遇到这个并修好了这个:

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
}

答案 1 :(得分:3)

您可以这样做:

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变量来做类似于TörökGábor在gist he provided中所做的事情,即:

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 :(得分:-4)

请注意,这仅适用于您要迭代的对象是数组(具有数字键)

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符号是必要的,因为如果省略,它将执行字符串连接,密钥会生成011223,等等

答案 3 :(得分:-4)

如上所述,属性没有明确的顺序,因此最后枚举的属性仅在之后才知道。

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