TypeScript无法迭代关联数组

时间:2018-03-19 18:08:38

标签: arrays typescript

我有一个服务,它在typescript中填充我的关联数组,

fun populateData(){
let tempArr;
tempArr = [];
this.service.get('Post', 1, 'true').subscribe(
        (response) => {
          this.loadingIcon = false;

          for (let i = 0; i < response.results.length; i++) {
             tempList = response.results[i]['tags'];
             for ( let iter of tempList){
               if ( iter in tempArr) {
                 tempArr[iter] = tempArr[iter] + 1;
               }else {
                 tempArr[iter] = 1;
               }
             }
          }
        },
        (error) => {
          if (error['status'] === 401) {
            localStorage.clear();
            this.router.navigateByUrl('/login');
          } else {
            this.router.navigateByUrl('/error');
          }
        }
      );
      console.log(tempArr);
        /*
          This function is inside a class, once I iterate get access to tempArr I will be assigning the tempArr data to a class variable like

       for (items in tempArr){
            this.data.push(items, tempArr[items]);
       }
        */
}

我能够使用上面的服务填充我的关联数组,该服务在控制台中提供以下输出,

tempArr in the console log output

我无法遍历此数组,我尝试了以下几种方法,

for ( const key in tempArr) {
      console.log(key + ':' + tempArr[key]);
    }

我想要它们的键和数组中的值。

1 个答案:

答案 0 :(得分:2)

TypeScript通常假定数组的键是数字。你在做什么可能有用,但它不是很惯用。我不会重写你的整个函数,但这里有几点指示:

构建关联数组(从现在开始简称地图)时,您应该尝试使用对象而不是数组:

const tagCounts: { [key: string]: number } = {};
for (const result of response.results) {
    for (const tag of result.tags) {
        tagCounts[tag] = (tagCounts[tag] || 0) + 1;
    }
}

然后你可以用:

迭代结果
for (const tag of Object.keys(tagCounts)) {
    const count = tagCounts[tag];
    // Other stuff here
}

或者如果你有Object.entries的polyfill,那么:

for (const [tag, count] of Object.entries(tagCounts)) {
    // Other stuff here
}

查看你的代码,this.data.push似乎也是错误的:它会在你的data数组中添加一个字符串和一个数字,这几乎肯定不是你想要的。如果要存储键值对,也可以考虑将data转换为对象。