【问题标题】:How to eliminate repeated values in Nodejs?如何消除Nodejs中的重复值?
【发布时间】:2021-06-16 06:51:42
【问题描述】:

我正在获取具有重复 IP 和风险的 3 个数组中的数据。 IP可能有很多风险,比如:

ip=[1.1.1.0, 1.2.2.2,1.1.1.0,1.2.2.2, 192.168.1.1,192.168.1.1]
risk=[bot, bot, conn, conn,conn,bot]
data=[0,9,2,7,8,9]

如何操作这些数组以在 Nodejs 中获得预期的 JSON 结果。 期望的结果:

 result=   {
 ip:[1.1.1.0, 1.2.2.2,192.168.1.1];
 dataset:[
    {risk:bot,
    data:[0,9,9]
   },
  {risk:conn,
    data:[2,7,8]
   },
 ]

尝试的代码:

  letchartdata = {};
  chartdata.ip = [];
  chartdata.data = [];
  chartdata.risk = [];
  if (riskIps) {
    for (leti = 0; i < Object.entries(riskIps).length; i++) {
      letip = Object.values(riskIps[i])[0];
      for (const [key, value] ofObject.entries(riskIps[i])) {
        if (key !== 'ip' && value != 0) {
          chartdata.ip.push(ip);
          chartdata.data.push(value.toFixed(2));
          chartdata.risk.push(key);
        }
      }
    }
  }

【问题讨论】:

  • 你自己尝试过什么? (对我来说)您的算法/规则用于从第一组数据转换为第二组数据也不清楚。您需要更多关于其工作原理的信息。

标签: node.js arrays json


【解决方案1】:

您可以迭代您的风险数组并使用数据映射风险。您可以使用Set 获得唯一的ip

const ip = ['1.1.1.0', '1.2.2.2','1.1.1.0','1.2.2.2', '192.168.1.1','192.168.1.1'],
      risk = ['bot', 'bot', 'conn', 'conn','conn','bot'],
      data = [0,9,2,7,8,9],
      dataset = Object.values(risk.reduce((res, r, i) => {
        res[r] = res[r] || {risk: r, data: []};
        res[r].data.push(data[i]);
        return res;
      }, {})),
      result = {ip: [...new Set(ip)], dataset}
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    【解决方案2】:

    您可以使用 Array.reduce 创建所需的结果。您可以为 IP 地址使用 Set 以确保不添加重复项。

    例如:

    const ip = ['1.1.1.0', '1.2.2.2','1.1.1.0','1.2.2.2', '192.168.1.1','192.168.1.1'];
    const risk = ['bot', 'bot', 'conn', 'conn','conn','bot'];
    const data = [0,9,2,7,8,9]
    
    let result = ip.reduce((acc, ip, index) => {
        // Add the ip address to the set... 
        acc.ip.add(ip);
        let riskType = risk[index];
        let dataset = acc.dataset.find(ds => ds.risk === riskType);
        if (!dataset) {
            dataset = { risk: riskType, data: [] }
            acc.dataset.push(dataset);
        }
        dataset.data.push(data[index]);
        
        return acc;
    }, { ip: new Set(), dataset: [] })
     
    result.ip = [...result.ip];
    console.log("Result:", result);

    【讨论】:

      猜你喜欢
      • 2018-09-19
      • 2017-01-05
      • 2013-09-29
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      相关资源
      最近更新 更多