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

时间:2019-03-20 09:10:54

标签: angular typescript ecmascript-6

我想定义一个数据结构,在其中可以使用特定ID接收名称。 我尝试将它们添加到此处的字典中,并想找回名字

    let dict = [];
    for (let company of this.listOfCompanies) {
      dict.push({
        [company.id]: companyName
      });
    }

这是正确的方法吗?以及如何找回我的名字?我可以这样吗?

console.log(dict[83519952]);

4 个答案:

答案 0 :(得分:2)

设置类型以帮助linter和编译器,并使用对象而不是数组。

let dict: { [id: number]: string } = {};
for (const company of this.listOfCompanies) {
  dict[company.id] = company.name;
}
如果您不打算更改对它的引用,也可以将

dict声明为const

答案 1 :(得分:0)

 let dict = [];
    for (let company of this.listOfCompanies) {
      dict[company.id]= companyName;
      });
    }

这可能会对您有所帮助。

答案 2 :(得分:0)

尝试将dict作为对象而不是数组。您可以使用Array.reduce来做到这一点。

这是vanilla es6中的一个示例,证明了这一点:

const listOfCompanies = [{"id": 100, "companyName": "foo"}, {"id": 101, "companyName": "bar"}];
const dict = listOfCompanies.reduce((acc, {id, companyName} ) =>{ //destructuring id and companyName keys from the object to variables
   acc[id] = companyName;
   return acc;
},{});
console.log(dict[100]);
console.log(dict[101]);

答案 3 :(得分:0)

感谢您的出色回答。我最终使用了Map(具有一些更好的功能,即在未定义时不会抛出错误):

我将定义它:

    for (let company of this.listOfCompanies) {
      this.companiesNames.set(+company.id, company.name);
    }
    console.log(this.companiesNames.get(83519952));

然后在我的函数中

{{1}}

那很好,但是有什么理由这是一个不好的选择吗?