Как получить последний элемент в объекте 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?

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

Ответы

Ответ 1

не используйте 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];

Ответ 2

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

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

Ответ 3

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

var lastItem = null;
for(key in obj) {
  console.log( key + ' has a value ' + obj[key] );
  lastItem = key;
}
// now the last iteration 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 key is in key
console.log('the last key ' + key + ' has a value ' + obj[key]);

Ответ 4

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

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

Ответ 5

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

Ответ 6

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)