Соблюдение строгого порядка свойств в обьекте
Друзья, такой вопрос: как задать строгий порядок свойств в обьекте на js? Проблема следующая: есть у нас, к примеру, обьект с разными свойствами:
let objekt = {
get arr1() {
let a = []
delete this.arr1
return this.arr1 = a
},
arr2: ['bbbb'],
get arr3() {
let a = []
return a
},
get rows() {
let a = this.arr1.length;
delete this.rows
return this.rows = a;
},
get colums() {
let a = 0
let property = Object.getOwnPropertyNames(this)
for (var i = 0; i < property.length; i++) {
if (property[i] === 'colums') continue
if (Array.isArray(this[property[i]])) {
a++
}
}
delete this.colums
return this.colums = a;
},
obj2: {},
}
console.log(objekt)
Но когда я смотрю на конечный результат публикации этого обьекта, то обнаруживаю, что порядок свойств изменился:
Конкретно в данном примере, это не особо критично, но я активно использую подобные конструкции обьектов для заполнения таблиц и там порядок массивов является критически важным, если какой-то из массивов изменит свое положение в обьекте, это может сломать всю таблицу. И теперь мне интересно, можно ли это как-то исправить?
Ответы (2 шт):
console.log просто под капотом сортирует значения. Поэтому выводится так. Это нужно просто для удобства разработчика, чтобы можно быстро найти любое значение, а не в хаосе искать нужный ключ.
Eсли взять тот же getOwnPropertyNames, то даст нормальную последовательность... Т.е. console.log(Object.getOwnPropertyNames(objekt)) вполне себе покажет как надо
Если
порядок [...] является критически важным
то никогда не полагайтесь на порядок свойств в объекте.
Используйте массивы или, может быть, подойдёт Map. Или ещё какая-то структура которая гарантирует порядок. Но не объект.
