typescript - 将所有相似的值组合到一个数组中
问题描述
在这里我有一个对象Version
/** Model **/
interface Version {
name: string
version: number
someotherproperty: string
conditional: boolean
}
/** Expected Object Outcome **/
interface Application {
name: string
versions: Version[]
}
/** Incomplete constant that should return an Application Array. **/
const data = listOfVersions.reduce((a, item) => return Application[])
我正在尝试创建一个使用 ES6 reduce按名称生成版本列表的函数。
我真的不想扩展下面的可怕代码,我想替换它:
for(var j=0;j<data.length;j++){
var current = data[j];
for(var i=j+1;i<data.length;i++){
if(current.name = data[i].name){
if(!isArray(current.version))
current.version = [ current.version ];
if(isArray(data[i].version))
for(var v=0;v<data[i].version.length;v++)
current.version.push(data[i].version[v]);
else
current.version.push(data[i].version);
data.splice(i,1);
i++;
}
}
}
解决方案
创建一个按名称索引的对象,在其值中包含一个版本数组,然后获取对象的值:
const versionsByName: {[name: string]: Application} = {};
for (const { name, version } of listOfVersions) {
if (!versionsByName[name]) {
versionsByName[name] = { name, versions: [] };
}
versionsByName[name].versions.push(version);
}
const output = Object.values(versionsByName);
虽然可以用reduce
. 请参阅V8 开发人员关于该主题的此视频。
推荐阅读
- angular - 如何在角度上的拦截器上传递查询?
- eclipse - Eclipse 对 Maven 依赖项并没有真正的帮助
- proto - 如何在 webbots 中编辑 PUMA560 原型文件
- java - 错误 :: “错误创建具有名称的 bean” 在 Spring
- oauth - 如何使用邮递员的oauth访问令牌调用jira服务器rest api。?
- c# - 如何找到以另一个控件 UWP 8.1 的样式定义的控件
- tomcat - 检查Tomcat版本的命令
- php - 如何防止用户在动态密码更改后未经身份验证
- c# - 根据列表中的父 ID 对列表排序
- excel - 从网站上抓取特定 jquery 数据的数据