[英]Recognize the last iteration in a Javascript object
我有一個正在迭代的 object
for (el in object) {
// Some work here
}
我想知道最后一次迭代是什么時候,在迭代內部,所以我可以做
for (el in object) {
// Some work here
if (last_iteration) {
// Do something
}
}
有什么直接的方法嗎?
我知道我遲到了,但我剛剛遇到了這個問題並像這樣修復了它:
var i = 0; var object = { a: 1, b: 2 }; var length = Object.keys(object).length; for (el in object) { var last = i === length - 1; // true if last, false if not last console.log(i, el, last); i++; }
你可以這樣做:
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ök Gábor 在他提供的要點中所做的操作,即:
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
}
希望這會有所幫助。
如果鍵不是數字,則有效:
let anObject = {'one': 1, 'two': 2, 'three': 3, 'lastKey': 4}; let objectKeys = Object.keys(anObject); let lastObjectKey = objectKeys.slice(-1).toString(); console.log(lastObjectKey); // 'lastKey'
Object.keys() 方法返回給定對象自己的可枚舉屬性名稱的數組,以與正常循環相同的順序進行迭代。
數字鍵導致重新排序的示例:
let anObject2 = {3: 3, 2: 2, 'notLastKey': 4, 1: 'lastKey'}; let objectKeys2 = Object.keys(anObject2); console.log(objectKeys2); // ["1", "2", "3", "notLastKey"] let lastObjectKey2 = objectKeys2.slice(-1).toString(); console.log(lastObjectKey2); // "notLastKey"
請注意,這僅在您迭代的對象是數組(具有數字鍵)時才有效
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
等
如前所述,屬性沒有明確的順序,所以最后枚舉的屬性只有在之后才知道。
var object = { a: 'b', c: 42 };
for ( var string in object ) ;
alert( object[string] ); // last property name is still here
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.