(JavaScript)创建一个比我拥有的算法更高效的算法

(JavaScript)创建一个比我拥有的算法更高效的算法,javascript,algorithm,processing-efficiency,Javascript,Algorithm,Processing Efficiency,我有这样的情况: let scans = [ { source: "10.0.0.2", destination: "20.0.0.2" } { source: "10.0.0.4", destination: "20.0.0.6" } ] const handleScan = (source, destination, port) => { let newScan = { source : source,

我有这样的情况:

    let scans = [
      { source: "10.0.0.2", destination: "20.0.0.2" }
      { source: "10.0.0.4", destination: "20.0.0.6" }
    ]

    const handleScan = (source, destination, port) => {
      let newScan = {
        source : source, 
        destination : destination
      }

      for (scan of scans) {
        if (scan.source !== source && scan.destination !== destination)
        scans.push(newScan)
      }
    }
现在,这个函数每秒执行1000次,这意味着每次执行for循环来查看这对函数是否存在是非常糟糕的。
您建议我如何更有效地完成这项工作?

目标是跟踪所有来源的所有目的地吗?如果是这样的话,这不是它目前正在做的事情。以下是如何做到这一点:

let scans = [
  { source: "10.0.0.2", destination: "20.0.0.2" }
  { source: "10.0.0.4", destination: "20.0.0.6" }
]

const handleScan = (source, destination, port) => {
  let newScan = {
    source : source, 
    destination : destination
  }

  var scanFound = false;
  for (scan of scans) {
    if (scan.source !== source && scan.destination !== destination){
      scanFound = true;
      break;
    }
  }
  if(!scanFound){
    scans.push(newScan)
  }
}
如果这就是目标,我建议将格式更改为一个对象,以source作为键,destinations作为值,因此它是一个查找,而不是一个循环:

var destinationsBySource = {
  "10.0.0.2": ["20.0.0.2"],
  "10.0.0.4": ["20.0.0.6"]
]

var handleScan = function(source, destination){
  //Initialize destinations as an array if source is not there
  destinationsBySource[source] = destinationsBySource[source] || [];

  //Add the destination if needed
  if(destinationsBySource[source].indexOf(destination) == -1){
    destinationsBySource[source].push(destination);
  }
};//End of handleScan function

如果您的代码没有任何问题,并且它实际上正在工作,但您只想检查它,并可能进行改进,我想你可以找到一个更好的答案,询问你是否真的想只推送源和目标与任何现有扫描不同的扫描?你可以创建一个
,它是由
分隔的源和目标的组合,将大量的
新闻扫描
拷贝推送到你的阵列上,这可能是性能问题的根源。如果调用
handleScan
一次,将以前未看到的IP作为源和目标,则可以通过调用
scans.push(newScan)
为扫描中的每个元素执行一次扫描,从而使扫描的大小加倍。如果你用新的IP每秒调用1000次,
扫描将很快占用比整个世界更多的内存,就像@Paulpro说的,你当前的算法似乎工作不正常。函数应该解决的问题是什么?这个
扫描
阵列在其他地方是如何使用的?非常感谢。这是我记得在这种情况下应该采用的解决方案,但不能完全做到。@YossiDagan欢迎,很高兴我能提供帮助:)