我有一个服务,它在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]);
}
*/
}
我能够使用上面的服务填充我的关联数组,该服务在控制台中提供以下输出,
我无法遍历此数组,我尝试了以下几种方法,
for ( const key in tempArr) {
console.log(key + ':' + tempArr[key]);
}
我想要它们的键和数组中的值。
答案 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
转换为对象。