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 (неправильно)
В общем, перед своим циклом я создаю пустой объект
var firstObj = {}
Далее в цикле через Object.assign(firstObj, {[item.type: { props } })
создаю новый, и добавляю его в главный объект так же через Object.assign:
object = Object.assign({}, firstObj)
Correct answer by sinneren on December 27, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP