2014-12-27 100 views
0

我有一個nodes_object陣列,其具有以下種結構:Javascript:檢查元素是否在二維數組中的快速方法?

nodes_object = { 
      1: { 
       source: '001', 
       name: 'A', 
       target: '004', 
       name: 'B' 
       }, 
      2: { 
       source: '003', 
       name: 'C', 
       target: '001', 
       name: 'A' 
       }, 
      } 

然後,我也有一個數組sorted其被以下列方式構造:

 sorted = { 
      1: { 
       val: '001', 
       count: '100' 
       }, 
      2: { 
       val: '003', 
       count: '80' 
      } 

我需要創建將通過nodes_object重申一個函數,檢查sourcetarget是否都包含在sortedval參數之一中,如果有,請繼續。

到目前爲止,我想出了下面的函數,它首先通過nodes_object重申,然後通過sorted重申,看看是否有任何的元素是在它存在,但我不知道是否有一個更快和更有效的方法來做到這一點?

謝謝!

for (var i = 0; i < nodes_object.length; i++) { 

     var sourcein = null; 
     var targetin = null; 

     for (var j = 0; j < sorted.length; j++) { 
      if (sorted[j].val == nodes_object[i][0]) { 
       sourcein = 1; 
      } 
      if (sorted[j].val == nodes_object[i][2]) { 
       targetin = 1; 
      } 
     } 


     if ((sourcein) && (targetin)) { 

       // Perform the function 
     } 
    } 
+4

這些都是對象,而不是數組。 – Barmar 2014-12-27 14:59:41

+0

@Barmar不確定它們是否真的存在,或者它是否只是用於問題的奇怪符號。 – 2014-12-27 15:03:22

+0

爲什麼你使用'null'和'1'而不是'false'和'true'? – nnnnnn 2014-12-27 15:35:04

回答

3

首先,去創造你使用[],不{}陣列。因此,它應該是:

nodes_object = [ 
    { 
    source: '001', 
    name: 'A', 
    target: '004', 
    name: 'B' 
    }, 
    { 
    source: '003', 
    name: 'C', 
    target: '001', 
    name: 'A' 
    }, 
]; 

,類似的還有sorted

創建一個對象,其關鍵是您想要測試的val對象。

hash = {}; 
for (var k = 0; k < sorted.length; k++) { 
    hash[sorted[k]] = true; 
} 

然後你可以使用in hash測試的東西是否在sorted發現:

var sourcein, targetin; 
for (var i = 0; i < nodes_object.length; i++) { 
    sourcein = nodes_object[i].source in hash; 
    targetin = nodes_object[i].target in hash; 
    if (sourcein && targetin) { 
     ... 
    } 
} 
+0

...加上JavaScript技術上沒有多維數組,但我知道OP的含義。 – Ben 2014-12-27 15:09:50

+0

OP希望*檢查源和目標是否都包含在一個排序的val參數中*(這就是它們的示例代碼的工作原理,這導致了一個不同的測試:'if(nodes_object [i] .source == nodes_object [i] .target && nodes_object [i] .source in hash){...}' – axiac 2014-12-27 15:18:33

+0

這就是我最初寫的東西,然後我注意到他的代碼在循環完成後檢查變量,因爲他只是要求更快的代碼方式,我認爲基本的邏輯是正確的,所以我保留了這個。 – Barmar 2014-12-27 15:19:58

相關問題