首页 > 解决方案 > 如何从打字稿集合中合并字典?

问题描述

我已将 typescript-collection 包安装到我的 Angular 项目中以使用 Dictionary 类型。我想将社交媒体中的所有最新帖子与图像发布日期一起保存在字典中。在此之后,我想将所有字典合并到一个字典中。

let TwitterPosts = this.getLatestTwitterPosts();
let InstagramPosts = this.getLatestInstagramPosts();
let FacebookPosts = this.getLatestsFacebookPosts();

getLatests[type]Posts-Methods 是这样的:

const type = 'twitter';
let TwitterPosts = new Collections.Dictionary<number, PostSocialmediaFeedComponent>();
for (let count = 0; count < 10; count++) {
  let PostedDate: Date;
  let url: string;
  // USING THE API TO GET THE VALUES
  TwitterPosts.setValue(count, new PostSocialmediaFeedComponent(url, PostedDate, type));
}
return TwitterPosts;

标签: typescriptdictionarycollectionsmerge

解决方案


只需使用一个简单的对象,合并就变得微不足道并且在语法上得到支持。不要在不需要的复杂库上浪费时间。

const type = 'twitter';
const twitterPosts: {[key: number]: PostSocialmediaFeedComponent} = {};
for (let count = 0; count < 10; count++) {
  // USING THE API TO GET THE VALUES
  twitterPosts[count] = new PostSocialmediaFeedComponent(url, PostedDate, type);
}
return TwitterPosts;

除了简化依赖关系并使您的代码更简单之外,使用对象还为您提供了对琐碎合并的语法支持。

const twitterPosts = this.getLatestTwitterPosts();
const instagramPosts = this.getLatestInstagramPosts();
const facebookPosts = this.getLatestsFacebookPosts();

const merged = {
  ...twitterPosts,
  ...instagramPosts,
  ...facebookPosts
};

这是内置 ECMAScript 标准库功能的语法糖Object.assign

const merged = Object.assign({}, twitterPosts, instagramPosts, facebookPosts);

推荐阅读