Помощь в заполнении объекта JS

Есть такой объект:

obj = {
...

test: {
0: {а:'sdfgs'},
1: {а:'gdfhd'},
}

...
}

Можно ли сделать нечто простое типа push() в test, чтобы получилось так:

obj = {
...

test: {
0: {а:'sdfgs'},
1: {а:'gdfhd'},
2: {а:'sdfs'},
}

...
}

Ответы (3 шт):

Автор решения: OPTIMUS PRIME

Массивы и являются объектами, которым дали кучу полезных методов для удобной работы с нумерованными списками. Их и стоит использовать для подобных задач.

Касаемо объекта + push... Можно:

const PseudoArray = getClass_PseudoArray();

let obj = {
  test: new PseudoArray({а:'000'}, {а:'111'}),
};

obj.test.push({а:'222'});
obj.test.push({а:'333'});

console.log(obj);

/***/
function getClass_PseudoArray() {
  return class PseudoArray {
    constructor() {
      for( let i = 0; i < arguments.length; i++ ) {
        this[i] = arguments[i];
      }
      
      Object.defineProperty(this, "length", {
        value: arguments.length,
        writable: true,
      });
    }
    
    push(el) {
      this.length += 1;
      this[ this.length - 1 ] = el;
    }

    pop(el) {
      delete this[ this.length - 1 ];
      this.length -= 1;
    }
  }
}

Но не нужно (именно в связке с нумерованным списком). А так, объекты со встроенными методами из серии add / remove достаточно удобны: Чтобы управлять элементами, не запоминая, как объект устроен внутри.

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

var obj = {
  test: {
    0: {а: 'sdfgs'},
    1: {а: 'gdfhd'}
  }
};

var nextIndex = 0;
while (nextIndex in obj.test) nextIndex++;
obj.test[nextIndex] = {а: 'sdfs'};

console.log(obj);

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

Тогда вот и моё решение:

let obj = {
  test: {
    0: {а:'sdfgs'},
    1: {а:'gdfhd'},
  }
};

function pushInSubObject(obj, subObjName, value) {
  obj[subObjName] = Object.entries(obj[subObjName]);
  obj[subObjName].push( [obj[subObjName].length, value] );
  obj[subObjName] = Object.fromEntries(obj[subObjName]);
}

pushInSubObject(obj, "test", {a:"sdfs"});
pushInSubObject(obj, "test", {a:"second ahahaahhahaha"});
console.log(obj);

→ Ссылка