Добавьте дополнительные значения к ключу Typescript JSON, который определен как массив - PullRequest
1 голос
/ 14 января 2020

У меня есть определение класса ...

class anObj { 
  "ID" : string;
  dialog: {[id : number]:{hide: boolean;}} = {
    0 : {"hide": false},
    14 : {"hide": false}
  }    
}
class manyObjects {
  myGroup: anObj [] = [];
}
...
public stuff = manyObjects;

Это полностью работает так, как мне бы хотелось ... Я могу использовать значение id в качестве прямого ключа ...

var x:number = 1 //used for a different tier of logic
stuff.myGroup[x].dialog[14].hide!=true

Вот где я застрял ... Я хотел бы добавить больше диалогов в группу. Я дошел до нашего ...

stuff.myGroup[x].dialog

и не могу понять, как добавить что-то вроде, например, пу sh ...

.push(7 : {"hide": true})

, Я могу напечатать эту строку, и IDE говорит, что все в порядке ...

stuff.myGroup[x].dialog[[id=7].push({"hide": false})];

однако, когда я проверяю, элемент не добавляется в массив ...

1 Ответ

1 голос
/ 14 января 2020

Что я мог бы извлечь из вашего кода, так это то, что вы пытаетесь добавить новый диалог к ​​объекту, содержащемуся в свойстве «dialog» объекта anObj, которое не является массивом. Это объект с ожидаемой структурой в машинописном тексте: каждое свойство этого объекта должно быть числом, а значение каждого свойства должно иметь тип {hide: boolean;}.

Оттуда это довольно просто, вы добавляете новое свойство ( или перезаписываете существующее ), как и для любого JS объекта:

stuff.myGroup[x].dialog[7] = {hide: false};

Опять, stuff.myGroup [x] .dialog - это объект , а не массив, массив это stuff.myGroup. Если вы хотите добавить еще одну «группу» в myGroup, вы должны сделать что-то вроде:

stuff.myGroup.push(new anObj());

EDIT

Пример, который игнорирует шум, создаваемый дополнительными объектами как вещи и моей группе, но иллюстрирует добавление новой пары ключ-значение:

class anObj { 
  "ID" : string;
  dialog: {[id : number]:{hide: boolean;}} = {
    0 : {"hide": false},
    14 : {"hide": false}
  }    
}
class manyObjects {
  myGroup: anObj [] = [];
}

var obj = new anObj();
obj.dialog[7] = { hide: true };
console.log(obj);

Вы можете попробовать, что в машинопись площадка -> https://www.typescriptlang.org/play/?ssl=14&ssc=18&pln=1&pc=1#code / MYGwhgzhAEYHYHkBGAraBvaAoa0BEAkgCJ7QBc0EALgE4CWcA5gNw7QAmdYIA9oxegDadduWhwArgFskAUxoBdMugAWI2RSQ8eIWfGYBfA9AC8GNrgAMY9HjXtZeCgDNuEWQYA0F6AEYALDZ26k7QriDuBmzGuNhRoJAwUvAAnsgossBUMOhsUikA4jQ8EgAOFPDp0IIKptUKrFFYAG5gNNA8qHVwsgDusIioABQAlKydKAB0nNx8ggDstWaY9hrQtBKy0AaswDxwEDqyk7yMQxNjQA

Обновление 2

Чтобы вернуть перечисляемые ключи объекта, вы можете использовать метод Object.keys. См https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

console.log(Object.Keys(obj));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...