【问题标题】:what is the code for this? [closed]这个代码是什么? [关闭]
【发布时间】:2015-07-14 23:39:48
【问题描述】:

给定两个数组如下:

var searchResultsArray = [{"username": "abc", "userid": 23213}, {"username": "def", "userid": 45646}, {"username": "ghi", "userid": 9898}…..]; // size is 100

var connectionsResultsArray = [{"username": "abc", "userid": 23213}, {"username": "xyz", "userid": 7868}, {"username": "ghi", "userid": 9898}…..]; // size is 300

增强第一个数组 (searchResultsArray) 以具有一个标志,例如 connected,如果元素存在于第二个数组中,则将其设置为“是”,否则设置为“否”。

上面的样本输出:

var connectedSearchResultsArray = [{"username": "abc", "userid": 23213, "connected": "yes"}, {"username": "def", "userid": 45646,  "connected": "no"}, {"username": "ghi", "userid": 9898, , "connected": "yes"}…..]; // size is 100

【问题讨论】:

  • 很好的家庭作业问题:) 你应该自己做。
  • 至少,首先尝试自己解决它(并在你的问题中表现出一些努力)。 We're not against assisting with homework,但我们反对只给你一个解决方案。
  • var searchResultsArray = [ {"username": "abc", "userid": 23213}, {"username": "def", "userid": 45646}, {"username": " ghi", "userid": 9898}]; var connectionsResultsArray = [ {"username": "abc", "userid": 23213}, {"username": "xyz", "userid": 7868}, {"username": "ghi", "userid": 9898 }]; angular.forEach(searchResultsArray,function(item){ angular.forEach(connectionsResultsArray,function(obj){ if(obj[item.userid] == item.userid){ item.connected = 'yes'; } else{ item.已连接 = '否'; } }); })
  • 我不知道,你的输出告诉你什么?

标签: javascript arrays


【解决方案1】:

您可以简单地迭代第一个数组,然后在该迭代中迭代第二个数组以进行比较。但这将是 O(n^2),这根本不理想。

相反,您可以将第二个数组存储在哈希表中,然后遍历第一个数组一次并找出其键是否存在于哈希表中。如果是这样,那么您可以以这种方式附加它。这给出了 O(n) 的时间复杂度,这比我上面提到的蛮力方法要好得多。

【讨论】:

    【解决方案2】:

    执行此操作的快速方法是在您的第二个 (connectionsResultsArray) 中创建一个项目字典,以便查找时间很快 (O(1)),然后迭代您的第一个数组 (searchResultsArray) 和检查匹配项:

    var searchResultsArray = [{"username": "abc", "userid": 23213}, {"username": "def", "userid": 45646}, {"username": "ghi", "userid": 9898}];
    var connectionsResultsArray = [{"username": "abc", "userid": 23213}, {"username": "xyz", "userid": 7868}, {"username": "ghi", "userid": 9898}];
    
    // I'm assuming userid is sufficient to determine uniqueness
    var useridToConnectionsResultMap = {};
    
    for (var i = 0; i < connectionsResultsArray.length; i++) {
      var connectionsResult = connectionsResultsArray[i];
      useridToConnectionsResultMap[connectionsResult.userid] = connectionsResult;
    }
    
    for (var i = 0; i < searchResultsArray.length; i++) {
      var searchResult = searchResultsArray[i];
      searchResult.connected = useridToConnectionsResultMap[searchResult.userid] ? 'yes' : 'no';
    }
    

    这样,您的运行时将是 O(n+m),其中 nm 是数组中的项目数。

    您在对原始问题的评论中提到的解决方案将具有更大的最坏情况运行时间 (O(n * m)),因为您可能会遍历第一个数组中每个项目的完整第二个数组(如果没有匹配项)。当您处理大型集合时(或者只是一般情况下,因为这是一个坏习惯),这很重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      • 2014-02-20
      • 2017-09-17
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多