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