簡體   English   中英

識別 Javascript object 中的最后一次迭代

[英]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之前的+號是必需的,因為如果省略,它將進行字符串連接,鍵產生011223

如前所述,屬性沒有明確的順序,所以最后枚舉的屬性只有在之后才知道。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM