Получение последнего добавленого ключа в объект | JS
Есть объект obj = {}.
В любой точке проекта к нему есть доступ через импорт и он может меняться. Мне нужно знать, как я могу получить последний добавленный ключ в объект? Ключи могут быть как строками, так и числами.
Примечание: нужно делать это без использование Object.keys и Object.values.
Ответы (2 шт):
Для получения последнего добавленного ключа в объект без использования Object.keys и Object.values, можно использовать цикл for...in:
for (var key in obj) {
// key - последний добавленный ключ
}
Если допустимы и строковые и числовые ключи - то нет никаких инструментов для определения последнего добавленного. Ни с использованием 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отслеживать изменение свойств в объекте и сохранять последний добавленный ключ.