状态:
// WebdriverIO log function
browser.log('browser').then(function(logs) {
console.log(logs.value);
});
返回以下数组:
[ { level: 'INFO',
message: 'https://localhost:3000/ 42:14 "foo"',
timestamp: 1485857149752 },
{ level: 'INFO',
message: 'https://localhost:3000/ 43:14 "bar"',
timestamp: 1485857149752 },
{ level: 'INFO',
message: 'https://localhost:3000/ 46:14 Array[6]',
timestamp: 1485857149755 },
{ level: 'SEVERE',
message: 'https://localhost:3000/favicon.ico - Failed to load resource: the server responded with a status of 404 (Not Found)',
timestamp: 1485857149834 } ]
目标:
我想创建一个我以后可以使用的方法,它返回一个日志条目列表。在我的示例应用程序中就是这种情况:
foo
bar
我不知道如何仅为“message”键循环其值。
要过滤以便仅获取“foo”或“bar”,我会使用RegEx或.split函数。
答案 0 :(得分:3)
您可以使用Array.prototype.reduce()
执行此操作:
let arr = [{
level: 'INFO',
message: 'https://localhost:3000/ 42:14 "foo"',
timestamp: 1485857149752
}, {
level: 'INFO',
message: 'https://localhost:3000/ 43:14 "bar"',
timestamp: 1485857149752
}, {
level: 'INFO',
message: 'https://localhost:3000/ 46:14 Array[6]',
timestamp: 1485857149755
}, {
level: 'SEVERE',
message: 'https://localhost:3000/favicon.ico - Failed to load resource: the server responded with a status of 404 (Not Found)',
timestamp: 1485857149834
}];
let res = arr.reduce((a, b) => {
if (b.level === 'INFO') {
a.push(b.message.split(" ").pop().replace(/"/g, ""));
}
return a;
}, []);
console.log(res);
请记住在链接所有
之前执行检查b.message.split(" ").pop().replace(/"/g, "")
以避免获得空指针异常。
旁注:
未指定OP,但如果您要收集的邮件也包含空格,您可以替换上面的拆分并使用@JLRishe's regex instead
答案 1 :(得分:1)
您可以执行以下操作:
var log = [ { level: 'INFO',
message: 'https://localhost:3000/ 42:14 "foo"',
timestamp: 1485857149752 },
{ level: 'INFO',
message: 'https://localhost:3000/ 43:14 "bar"',
timestamp: 1485857149752 },
{ level: 'INFO',
message: 'https://localhost:3000/ 46:14 Array[6]',
timestamp: 1485857149755 },
{ level: 'SEVERE',
message: 'https://localhost:3000/favicon.ico - Failed to load resource: the server responded with a status of 404 (Not Found)',
timestamp: 1485857149834 } ]
var messages = log
.filter(function (entry) { return entry.level === 'INFO'; })
.map(function (entry) {
return entry.message.replace(/^([^\s]+\s){2}"?|"$/g, '');
});
console.log(messages)
这不会将"foo"
转换为foo
等等,但目前尚不清楚您是如何期望代码执行此操作的(我已在您的问题中添加了对此的评论)