我有一个我正在迭代的对象
for (el in object) {
// Some work here
}
我想知道迭代内部的最后一次迭代是什么时候,所以我可以做到
for (el in object) {
// Some work here
if (last_iteration) {
// Do something
}
}
任何直截了当的方式吗?
答案 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
符号是必要的,因为如果省略,它将执行字符串连接,密钥会生成01
,12
,23
,等等
子>
答案 3 :(得分:-4)
如上所述,属性没有明确的顺序,因此最后枚举的属性仅在之后才知道。
var object = { a: 'b', c: 42 };
for ( var string in object ) ;
alert( object[string] ); // last property name is still here