Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向定义为数组的Typescript JSON键添加其他值_Javascript_Arrays_Json_Typescript_Key - Fatal编程技术网

Javascript 向定义为数组的Typescript JSON键添加其他值

Javascript 向定义为数组的Typescript JSON键添加其他值,javascript,arrays,json,typescript,key,Javascript,Arrays,Json,Typescript,Key,我有一个类定义 class anObj { "ID" : string; dialog: {[id : number]:{hide: boolean;}} = { 0 : {"hide": false}, 14 : {"hide": false} } } class manyObjects { myGroup: anObj [] = []; } ... public stuff = manyObjects; 这完全是我想要的方式…我可以使用id值作为直

我有一个类定义

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
不知道如何添加类似推送的内容

.push(7 : {"hide": true})
例如,我可以键入这行代码,IDE会说没问题

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

但是,当我检查时,元素没有添加到数组中…

我可以从您的代码中收集到的信息是,您正在尝试向anObj的“dialog”属性中包含的对象添加一个新对话框,该属性不是数组。它是一个在typescript中具有预期结构的对象:该对象的每个属性都应该是一个数字,每个属性的值都应该是{hide:boolean;}类型

从这里开始,很容易添加新属性(或覆盖现有属性),就像对任何JS对象所做的那样:

stuff.myGroup[x].dialog[7] = {hide: false};
同样,stuff.myGroup[x]。对话框是一个对象,而不是数组,数组是stuff.myGroup。 如果您想将另一个“组”添加到myGroup,则可以执行以下操作:

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

该示例忽略了额外对象(如stuff和my group)创建的噪波,但演示了如何添加新的键值对:

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);
您可以在typescript Playerd中尝试->

更新2

要返回对象的可枚举键,可以使用object.keys方法。看


.push()
修改原始数组,不返回新数组。是的,Sunny Patel,我想向现有数组添加一个新项。我还没打算退呢。您将如何向其中添加新项目?说一个像这样的。。。7:{“hide”:true}我没有添加新对话框。我正在构建一个我现在称之为非对称的键/值对索引数组,例如虚构:{[myKey:type]:{key1:type;key2:type}={“称呼:{“key1”:“Hi”},{“key2”:“你好吗?”},“对话:{”key1:“'s good”},{“key2”:“dem Mets如何?”}}}如果你完全声明了所有元素,这是有效的,例如虚构[saltation].key2=“你好吗?”. 使查找特定值变得非常容易,而无需按索引循环所有键。然而!我想添加一个新元素,比如“出发”:{“key1”:“一切都很好”}、{“key2”:“再见!”}但不能。这里没有JSON。JSON是一种用于移动和存储数据的文本格式。看,我没有添加新的对话框。我正在构建一个我现在称之为非对称的键/值对索引数组,例如虚构:{[myKey:type]:{key1:type;key2:type}={“称呼:{“key1”:“Hi”},{“key2”:“你好吗?”},“对话:{”key1:“'s good”},{“key2”:“dem Mets如何?”}}}如果你完全声明了所有元素,这是有效的,例如虚构[saltation].key2=“你好吗?”. 使查找特定值变得非常容易,而无需按索引循环所有键。然而!我想添加一个新元素,比如“离开”:{“key1”:“一切都很好”}、{“key2”:“再见!”}但不能。你可以随意调用它,在javascript中,它仍然是一个普通对象。现在的问题是,是什么阻止您添加新的键值对:typescript编译错误,还是运行时错误?还有别的吗?我必须重复一次,你需要注意在哪里以及如何添加它。我发布的第一个示例涉及键值对,其中key是7,value是对象{hide:false}非常酷!我明白了。所以如果我理解正确的话。。。如果我这样声明。。。keyName:{[id:(数字或字符串)]:{key1:type;key2:type};为了添加任何新元素,我根本不使用push(),而是将新元素视为已经存在,并按如下方式设置值。。。dialog[7]={hide:true,other:6}…以后,我可以直接引用它,var I=7,而不是循环通过键寻找7;如果(dialog[i]!=undefined){//对dialog[7]执行一些操作。隐藏}…这样可以节省大约30行代码和大量潜在的bug!谢谢快速跟进问题。。。如何确定为obj声明的对话框数,或者如果它不是数组,如何迭代它们?更新了后续问题的答案。
console.log(Object.Keys(obj));