繁体   English   中英

我想向数组添加一个值,尝试使用拼接,但它想要工作吗?

[英]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))

这些是解决方案中的以下步骤 -

  1. 通过Array.prototype.slice跳过 header 行
  2. 按分隔符分割|
  3. 统计 url 键
  4. 根据url key累加object
  5. 现在在累积后,计算存储在items.length中的累积条目数,并为不同的 userId(s) 使用一个集合来计算它。
  6. 使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM