[英]I want to add an value to an array, trying using splice, but it want work?
我在让 splice 为我的 /home 工作时遇到问题。
我显然做错了什么,但我不知道是什么,请帮忙?
const logArray = [ "|timestamp |url |userid|", "|2019-03-01 09:00:00UTC |/contact.html |12345 |", "|2019-03-01 09:00:00UTC |/contact.html |12346 |", "|2019-03-01 10:00:00UTC |/contact.html |12345 |", "|2019-03-01 10:30:00UTC |/home.html |12347 |", "|2019-03-01 11:00:00UTC |/contact.html |12347 |", "|2019-03-02 11:00:00UTC |/contact.html |12348 |", "|2019-03-02 12:00:00UTC |/home.html |12348 |", "|2019-03-03 13:00:00UTC |/home.html |12349 |", "" ]; let result = []; const urls = () => { const url = logArray.map((Objects, index, arr) => { return Objects.slice(25, 38); }); console.log("url:", url); if (url) { const contact = url.find((a) => a.includes("contact")); result.push(contact); console.log(contact); //console.log(contact) } if (url) { const home = url.find((a) => a.includes("home")); result.splice(3, 0, home); console.log(home); } }; urls(); console.log(result);
我计算了每个 url 上的唯一用户 ID,没有。 每个 url 的访问次数。
所以我把这个数组拿回来,根本没有拼接?::
console.log("result:", result); //output ["/contact.html", "/home.html ", 5, 4, 1, 1]
这就是我希望它看起来像的样子:
// dream scenario: ["/contact.html", 5, 4, "/home.html", 1, 1]
当我从代码中取出拼接 function 并在 codepen 中尝试时,它工作正常....但不是在完整代码中
在我看来,这不是解析日志数据的最佳变体,但如果您愿意的话。 这就是解决方案
const logArray = [
"|timestamp |url |userid|",
"|2019-03-01 09:00:00UTC |/contact.html |12345 |",
"|2019-03-01 09:00:00UTC |/contact.html |12346 |",
"|2019-03-01 10:00:00UTC |/contact.html |12345 |",
"|2019-03-01 10:30:00UTC |/home.html |12347 |",
"|2019-03-01 11:00:00UTC |/contact.html |12347 |",
"|2019-03-02 11:00:00UTC |/contact.html |12348 |",
"|2019-03-02 12:00:00UTC |/home.html |12348 |",
"|2019-03-03 13:00:00UTC |/home.html |12349 |",
""
];
function getDataFromLogs(logs) {
const formattedLogs = logs.slice(1, logs.length - 1)
const urls = {}
formattedLogs.map(log => {
const route = log.slice(25, 38);
const userID = log.slice(40, 46);
if (urls[route] === undefined) {
urls[route] = []
}
urls[route].push(userID)
})
const results = [];
Object.keys(urls).map(key => {
const data = urls[key];
results.push(key.trim(), data.length, [...new Set(data)].length);
})
return results;
}
// ["/contact.html", 5, 4, "/home.html", 3, 3]
console.log(getDataFromLogs(logArray))
这些是解决方案中的以下步骤 -
Array.prototype.slice
跳过 header 行|
items.length
中的累积条目数,并为不同的 userId(s) 使用一个集合来计算它。Array.prototype.flat
平结构以满足您想要的结果 const logArray = [ "|timestamp |url |userid|", "|2019-03-01 09:00:00UTC |/contact.html |12345 |", "|2019-03-01 09:00:00UTC |/contact.html |12346 |", "|2019-03-01 10:00:00UTC |/contact.html |12345 |", "|2019-03-01 10:30:00UTC |/home.html |12347 |", "|2019-03-01 11:00:00UTC |/contact.html |12347 |", "|2019-03-02 11:00:00UTC |/contact.html |12348 |", "|2019-03-02 12:00:00UTC |/home.html |12348 |", "|2019-03-03 13:00:00UTC |/home.html |12349 |", "" ]; const result = Object.entries(logArray.slice(1).reduce((acc, curr) => { if (curr) { let [,, url, userId] = curr.trim().split('|'); url = url.trim(); userId = userId.trim(); acc[url] = (acc[url] || []).concat({ url, userId }); } return acc; }, Object.create(null))).reduce((r, c) => { const [key, items] = c; const distinctItemCount = new Set(items.map(x => x.userId)).size; r.push([key, items.length, distinctItemCount]); return r; }, []).flat(); console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.