Соблюдение строгого порядка свойств в обьекте

Друзья, такой вопрос: как задать строгий порядок свойств в обьекте на 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)) вполне себе покажет как надо

→ Ссылка
Автор решения: Alexey Ten

Если

порядок [...] является критически важным

то никогда не полагайтесь на порядок свойств в объекте.

Используйте массивы или, может быть, подойдёт Map. Или ещё какая-то структура которая гарантирует порядок. Но не объект.

→ Ссылка