Если допустимы и строковые и числовые ключи - то нет никаких инструментов для определения последнего добавленного. Ни с использованием Object.keys
и Object.value
, ни без их использования.
Проблема подробно расписана в вопросе По какому принципу цикл FOR IN обходит массив?: сначала обходятся целочисленные ключи, потом строковые в порядке добавления.
Таким образом, если добавить ограничение, что ключи могут быть только строками, то есть их нельзя привести к целому числу в интервале от 0 до 232-2, можно воспользоваться обычным циклом for..in
var lastKey;
for(var key in obj){
lastKey = key;
}
console.log(lastKey);
Однако все сломается, если последним добавится числовой ключ, в этом случае результат будет ошибочным.
В качестве решения есть несколько путей:
запретить изменять объект везде кроме одного места, использовать функции для получения объекта, и установки свойства. В этом случае можно сохранять последний ключ при вызове функции добавляющей свойство.
воспользоваться Proxy
и возвращать его, вместо исходного объекта. С помощью хука .defineProperty
отслеживать изменение свойств в объекте и сохранять последний добавленный ключ.