我有一个数组
data = [ '2016-12-12 pass [pass]',
'2016-12-12 pass [pass]',
'2016-12-12 fail [fail]',
'2016-12-13 fail [fail]',
'2016-12-14 fail [fail]',
'2016-12-14 pass [pass]',
'2016-12-14 pass [pass]',
'2016-12-15 pass [pass]',
'2016-12-16 fail [fail]' ]
我尝试并思考了很多方法来使用各种函数来完成但无法找到如何实现这种格式:
2016-12-12 pass:2 fail: 1
2016-12-13 pass:0 fail: 1
2016-12-14 pass:2 fail: 1
2016-12-15 pass:1 fail: 0
2016-12-16 pass:0 fail: 1
最佳答案
这是一种方法:
const data = [
'2016-12-12 pass [pass]',
'2016-12-12 pass [pass]',
'2016-12-12 fail [fail]',
'2016-12-13 fail [fail]',
'2016-12-14 fail [fail]',
'2016-12-14 pass [pass]',
'2016-12-14 pass [pass]',
'2016-12-15 pass [pass]',
'2016-12-16 fail [fail]',
];
const result = {};
data.forEach(item => {
const [date, passFail] = item.split(' ');
if (!(date in result)) {
result[date] = { pass: 0, fail: 0 };
}
result[date][passFail] += 1;
});
console.log(result);
正如您在输出中看到的,这将返回一个对象,其属性名称为日期,其值是具有属性 pass
和 fail
的对象。
请注意,您可以使用 reduce
而不是 forEach
来保存一行,但如果您要改变无论如何,我使用了 forEach
来简单起见。
还要注意,虽然在实践中(即在当前的 JS 引擎中)对象保留其属性的插入顺序,但严格来说 JavaScript 对象属性是无序的。如果您想严格遵守顺序,则需要使用数组,在这种情况下,最简单的解决方案是事后转换,如下所示:
const result = {
"2016-12-12": { pass: 2, fail: 1 },
"2016-12-13": { pass: 0, fail: 1 },
"2016-12-14": { pass: 2, fail: 1 },
"2016-12-15": { pass: 1, fail: 0 },
"2016-12-16": { pass: 0, fail: 1 },
};
const resultArray = Object.keys(result).sort()
.map(key => [ key, result[key] ]);
console.log(resultArray);
关于javascript - 提供数组的组合结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42373868/