TransWikia.com

Как создать объект содержащий объекты с уникальными именами?

Stack Overflow на русском Asked by sinneren on December 27, 2020

В чём смысл: есть массив множества объектов, их может быть тысяча. У них есть определенные пары ключ-значение. Мне нужно заполнить один другой объект новыми объектами так, чтобы именем объекта стало одно из значений в переборе из массива. При этом, нужно чтобы получился уникальный список, при этом же, чтобы была проверка на существование, дабы не перезаписывать тысячу раз одно и то же.

Изначально я сделал это с массивом с именованными ключами, но по определенным причинам это мне не подходит:

array.forEach(item => {
   if (item.type in object === false) {
       object[item.type] = {
           somekey: item.somekey,
           ...
       }
   }
}

Если же делать иначе, то получается, что ключ записывается всегда один:

array.forEach(item => {
   if (item.type in object === false) {
       object = {
           [item.type]: {
               somekey: item.somekey,
               ...
           }
       }
   }
}

Можно сделать через Object.assign(array, { [item.type]: { ... }), но, как говорил, мне не нужно перезаписывать объект, так как далее у меня идёт итерация одного параметра по свойству, то есть object.item_type_name.somekey += 1;. А с данным способом значение всегда будет 1. А, ну и как выяснилось, это аналогично первому методу. А мне это не подходит, т.к. во vue эти данные перестают быть реактивными.

UPD:
Кажется придумал как описать проблему проще.
Если вложенный объект создан вручную, то всё ок:
object: { object_name: { props } }
Если вложенный объект создан через квадратные скобки, как через ключ массива, то не ок:
object[object_name] = { props }

где object_name в квадратных скобках это у нас строковое значение из свойства другого объекта в цикле

На скрине видно, как выглядит объект в secondary(правильно) и как в main (неправильно)

введите сюда описание изображения

One Answer

В общем, перед своим циклом я создаю пустой объект var firstObj = {} Далее в цикле через Object.assign(firstObj, {[item.type: { props } }) создаю новый, и добавляю его в главный объект так же через Object.assign: object = Object.assign({}, firstObj)

Correct answer by sinneren on December 27, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP