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