Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.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
Angular For循环在TypeScript(ES 6)中创建键值对_Angular_Typescript_Ecmascript 6 - Fatal编程技术网

Angular For循环在TypeScript(ES 6)中创建键值对

Angular For循环在TypeScript(ES 6)中创建键值对,angular,typescript,ecmascript-6,Angular,Typescript,Ecmascript 6,我想定义一个数据结构,在这里我可以使用一个特定的ID接收名称。 我试着在这里把它们添加到一个dict中,想找回名字 let dict = []; for (let company of this.listOfCompanies) { dict.push({ [company.id]: companyName }); } 这是正确的方法吗?我怎样才能找回我的名字?我可以这样做吗 console.log(dict[83519952])

我想定义一个数据结构,在这里我可以使用一个特定的ID接收名称。 我试着在这里把它们添加到一个dict中,想找回名字

    let dict = [];
    for (let company of this.listOfCompanies) {
      dict.push({
        [company.id]: companyName
      });
    }
这是正确的方法吗?我怎样才能找回我的名字?我可以这样做吗

console.log(dict[83519952]);

它可能会对您有所帮助。

设置一个类型来帮助linter和编译器,并使用object而不是array

let dict: { [id: number]: string } = {};
for (const company of this.listOfCompanies) {
  dict[company.id] = company.name;
}

如果不打算更改对它的引用,
dict
也可以声明为
const

尝试将
dict
视为对象而不是数组。您可以使用

这是vanilla es6中的一个示例,演示了这一点:
const list of companies=[{“id”:100,“companyName”:“foo”},{“id”:101,“companyName”:“bar”}];
const dict=listOfCompanies.reduce((acc,{id,companyName})=>{//将对象中的id和companyName键分解为变量
acc[id]=公司名称;
返回acc;
},{});
console.log(dict[100]);

console.log(dict[101])谢谢您的精彩回答。我最终使用了一个Map(它有一些更好的特性,在未定义时不会抛出错误):

我将对此进行定义:

companiesNames: Map<number, string> = new Map<number, string>();

这很好,但有什么理由这会是一个糟糕的选择吗

您的dict实际上应该是一个对象,而不是一个数组,这样您就可以在
O(1)
companiesNames: Map<number, string> = new Map<number, string>();
    for (let company of this.listOfCompanies) {
      this.companiesNames.set(+company.id, company.name);
    }
    console.log(this.companiesNames.get(83519952));