Как получить последний элемент в объекте javascript-value с циклом for?

var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }

если я делаю

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

он будет просматривать все значения в obj. Если у меня есть гораздо больший объект, как я могу знать, нахожусь ли я на последней итерации этого for петли?

Я понимаю, что пары ключевых значений на самом деле не организованы по порядку, но мне нужно что-то сделать в самой последней итерации этого цикла и не знаю, как.

6 ответов


не используйте for (key in obj), он будет перебирать все перечисляемые свойства, включая свойства прототипа, и может привести к удивительно ужасным вещам. Современный JS имеет специальную функцию для получения только соответствующих ключей из объекта, используя Object.keys(...), так что если вы используете var keys = Object.keys(obj) чтобы получить список ключей в виде массива, вы можете повторить это:

// blind iteration
Object.keys(obj).forEach(function(key, i) {
  var value = obj[key];
  // do what you need to here, with index i as position information.
  // Note that you cannot break out of this iteration, although you
  // can of course use ".some()" rather than ".forEach()" for that.
});

// 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,
  // using "break" if you need to cut the iteration short.
});

или выберите его последний элемент немедленно

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

или с помощью среза:

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

просто короче

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

Вы можете цикл через все из них и сохранить последний в переменной.

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]);

вы можете поместить логику для последнего элемента вне цикла:

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

вы можете поместить все ключи / значения в пустую переменную массива, которую вы создали. Затем откройте последний элемент массива с помощью array.длина-1.


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

}

или может использовать Object.размер(объект)