javascript - 如何从阵列中获取个人 ID 和通过/失败的数量?
问题描述
这是我拥有的一组数据。我需要一个具有唯一 ID 和单个通过/失败状态数量的新数组。我正在使用角度 6。
[
{"id":"2","status":"Passed"},
{"id":"5","status":"Passed"},
{"id":"7","status":"Passed"},
{"id":"2","status":"Passed"},
{"id":"9","status":"Passed"},
{"id":"0","status":"Passed"},
{"id":"10","status":"Passed"},
{"id":"4","status":"Passed"},
{"id":"8","status":"Passed"},
{"id":"5","status":"Passed"},
{"id":"7","status":"Passed"},
{"id":"0","status":"Passed"},
{"id":"1","status":"Passed"},
{"id":"0","status":"Passed"},
{"id":"1","status":"Passed"},
{"id":"0","status":"Passed"},
{"id":"11","status":"Passed"},
{"id":"4","status":"Passed"},
{"id":"2","status":"Passed"},
{"id":"5","status":"Passed"},
{"id":"2","status":"Passed"},
{"id":"5","status":"Passed"},
{"id":"2","status":"Passed"},
{"id":"5","status":"Failed"}
]
//JavaScript code
我期待输出
[
{"id":"1", "Passed": "2", "Failed": "0"},
{"id":"2", "Passed": "5", "Failed": "0"}....and so on]
输出中应该有 10 个元素。
解决方案
你可以试试这些方法。
https://jsfiddle.net/o3016bh7/
只是说你的 {id, "Passed", "Failed"} 有一个类,它可以计算 "Passed" 和 "Failed" 后面的整数。
class PassFailCounter {
constructor(id) {
this.id = id;
this.Passed = 0;
this.Failed = 0;
}
addPass() {
this.Passed++;
}
addFail() {
this.Failed++;
}
}
只需读入数据并在 Hashmap 中记住它,这意味着 id 是唯一的。之后, JSON.stringify() 返回所述地图的 .values() ,您将获得您提到的确切输出。
let str = '[{"id":"2","status":"Passed"},{"id":"5","status":"Passed"},{"id":"7","status":"Passed"},{"id":"2","status":"Passed"},{"id":"9","status":"Passed"},{"id":"0","status":"Passed"},{"id":"10","status":"Passed"},{"id":"4","status":"Passed"},{"id":"8","status":"Passed"},{"id":"5","status":"Passed"},{"id":"7","status":"Passed"},{"id":"0","status":"Passed"},{"id":"1","status":"Passed"},{"id":"0","status":"Passed"},{"id":"1","status":"Passed"},{"id":"0","status":"Passed"},{"id":"11","status":"Passed"},{"id":"4","status":"Passed"},{"id":"2","status":"Passed"},{"id":"5","status":"Passed"},{"id":"2","status":"Passed"},{"id":"5","status":"Passed"},{"id":"2","status":"Passed"},{"id":"5","status":"Failed"}]';
let data = JSON.parse(str);
let map = new Map();
data.forEach(entry => {
let exist = map.get(Number(entry.id));
if(!exist) {
map.set(Number(entry.id), new PassFailCounter(Number(entry.id)));
exist = map.get(Number(entry.id));
}
entry.status == "Passed" ? exist.addPass() : exist.addFail()
});
console.log(JSON.stringify(Array.from(map.values())));
也许不是最短的解决方案,但它有效。
编辑:而不是
JSON.stringify(Array.from(map.values()))
你也可以
JSON.stringify(Array.from(map.values()), function(key, value) {
if(isNaN(value)) {
return value;
}
return value.toString();
})
如果字符串类型对输出很重要。
推荐阅读
- shiny - 单击actionButton后将css添加到元素
- google-maps - 多边形如何知道顶点是否在谷歌地图上移动
- string - 如何测试 Robot Framework 中的字符串变量是否为空?
- ios - 使 Collection 符合自定义协议
- sql - 用 NULL 值替换/评估嵌套查询 | 甲骨文 SQL
- jenkins - jenkins:发布时出现异常,异常消息[权限被拒绝]
- excel - VBA/Excel 距离计算器 (Google API)
- javascript - 从 UTC 格式获取月份的天数
- c - 复合文字和指针
- laravel - .htaccess X-Frame-Options 标头未为某些 Laravel 路由设置