2014-01-12 67 views
8
var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' } 

如果我做了如何使用for循環獲取javascript值對象中的最後一項?

for(key in obj) { 
    console.log(key + ' has a value ' + obj[key]); 
} 

它看起來在所有的值obj。如果我有一個更大的對象,我怎麼知道我是否在for循環的最後一次迭代?

我意識到鍵值對並沒有按照順序組織,但我需要在循環的最後一次迭代中完成某些操作,但不知道如何。

+0

[如何在jQuery中獲取對象的長度](http://stackoverflow.com/questions/5533192/how-to-get-object-length-in-jquery) –

回答

23

不使用for (key in obj),它會遍歷所有枚舉的屬性包括原型屬性,並可能導致驚人的可怕的事情。現代JS有隻得到相關鍵調出的對象,使用Object.keys(...)一個特殊的功能,因此,如果您使用var keys = Object.keys(obj)拿到鑰匙作爲數組列表,然後你可以遍歷是:

// blind iteration 
Object.keys(obj).forEach(function(key) { 
    var value = obj[key]; 
    // do what you need to here 
}); 

// indexed iteration 
for(var keys = Object.keys(obj), i = 0, end = keys.length; i < end; i++) { 
    var key = keys[i], value = obj[key]; 
    // do what you need to here, with index i as position information 
}); 

或選擇它的最後一個元素立即

var keys = Object.keys(obj); 
var last = keys[keys.length-1]; 

或使用切片:

var keys = Object.keys(obj); 
var last = keys.slice(-1)[0]; 
+0

準確地說,我正在建議。 –

+0

爲什麼'Object.keys(obj)'比'hasOwnProperty'(我知道'hasOwnProperty'不是問題中的'(key in obj)'更好? 'Object.keys'將創建一個新對象來保存這些鍵。 –

+0

@ t.niese Obj.keys()= ECMAScript 5.1 –

0

你可以把邏輯的最後一個項目外循環:

var last_item = null; 
for(key in obj) { 
    last_item = key; 
} 
console.log(last_item); 
2

你可以通過所有這些循環,並保存在變量中的最後一個。

var lastItem = null; 
for(key in obj) { 
    console.log(key + ' has a value ' + obj[key]); 
    lastItem = key; 
} 
// now the last iteration's key is in lastItem 
console.log('the last key ' + lastItem + ' has a value ' + obj[lastItem]); 

另外,由於JavaScript的工作原理,鍵也在循環的關鍵變量中,因此甚至不需要額外的變量。

for(key in obj) { 
    console.log(key + ' has a value ' + obj[key]); 
} 
// now the last iteration's key is in key 
console.log('the last key ' + key + ' has a value ' + obj[key]); 
+0

聰明!我不知道這一點。 –

-2
for(var x=0 ; x<Object.keys(obj).length ; x++) 
{ 
    if(x==Object.keys(obj).length-1) // code for the last iteration 

} 

或者可以使用Object.size(OBJ)

+0

確實.length工作在一個對象上? – theshadowmonkey

+0

我不明白爲什麼不。微不足道的問題,總是有Object.size(obj) –

3

只是短

var last = (last=Object.keys(json))[last.length-1]; 
0

你可能會推動所有鍵/值到您創建一個空數組變量。然後,使用array.length-1訪問數組中的最後一個元素。

相關問題