TypeScript如何筛选对象数组中appname首次出现的对应完整对象
问题原因
你当前的写法会拿到最后一次出现的对象,是因为Map构造函数接收键值对数组时,遇到重复的键会用后面的键值对覆盖前面的,遍历完整个数组后,Map里存的自然就是每个appname最后一次出现的对应对象。
解决方案
你可以改用reduce方法遍历数组,仅当指定appname未在Map中存在时才存入,就能保留首次出现的对象:
this.getAppClient.getFullList() .subscribe((apps) => { const appMap = apps.myArray.reduce((map, current) => { const appName = current.myApp.appname; // 仅当Map中不存在该appname时才存入,保证存的是第一次出现的对象 if (!map.has(appName)) { map.set(appName, current); } return map; }, new Map()); this.applicationList = [...appMap.values()]; })
该方案时间复杂度为O(n),仅需遍历一次数组即可完成筛选,和原写法性能相当,可读性也更高。
内容的提问来源于stack exchange,提问作者S-R
相关产品推荐
相关产品推荐

