Получение последнего добавленого ключа в объект | JS

Рейтинг: 0Ответов: 1Опубликовано: 31.01.2023

Есть объект obj = {}.

В любой точке проекта к нему есть доступ через импорт и он может меняться. Мне нужно знать, как я могу получить последний добавленный ключ в объект? Ключи могут быть как строками, так и числами.

Примечание: нужно делать это без использование Object.keys и Object.values.

Ответы

▲ 3Принят

Если допустимы и строковые и числовые ключи - то нет никаких инструментов для определения последнего добавленного. Ни с использованием Object.keys и Object.value, ни без их использования.

Проблема подробно расписана в вопросе По какому принципу цикл FOR IN обходит массив?: сначала обходятся целочисленные ключи, потом строковые в порядке добавления.

Таким образом, если добавить ограничение, что ключи могут быть только строками, то есть их нельзя привести к целому числу в интервале от 0 до 232-2, можно воспользоваться обычным циклом for..in

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

Однако все сломается, если последним добавится числовой ключ, в этом случае результат будет ошибочным.

В качестве решения есть несколько путей:

  1. запретить изменять объект везде кроме одного места, использовать функции для получения объекта, и установки свойства. В этом случае можно сохранять последний ключ при вызове функции добавляющей свойство.

  2. воспользоваться Proxy и возвращать его, вместо исходного объекта. С помощью хука .defineProperty отслеживать изменение свойств в объекте и сохранять последний добавленный ключ.