2015-09-18 65 views
-3

我是一個新的JavaScript用戶,但我的任務是爲我的社區創建一個電子表格,看起來我碰到了一個凹凸。我一直在使用Google腳本和Google表格(所以我的社區也可以看到這些信息)。如何在JavaScript中找到兩個數組之間的區別?

基本上我有兩個數組,都填充了玩家列表。

  1. 我的第一個數組中填入了一個活躍球員列表,這些球員每隔一天都會改變一次。一些人下降,一些人得到補充,另一些人留在名單上。

  2. 我的第二個數組用於跟蹤每個人,所以它包含所有以前的成員的列表。

我的問題: 假設我的第二個數組包含的值 「PLAYER1」, 「Player2」 和 「Player3」,我的第一個數組包含的值 「PLAYER1」, 「Player2」 和 「Player3」 。

現在考慮第一個數組的變化,也許Player1被刪除,Player4被添加(以隨機順序),其中第二個數組包含「Player1」,「Player2」和「Player3」,但是我的第一個數組包含值「Player4」,「Player2」和「Player3」。我想要一個比較兩個數組的東西(以任何順序)並返回第一個數組和第二個數組之間的差異,然後將它們添加到第二個數組中。

IE:
陣列1 - 活躍成員= PLAYER1,Player2,Player3,Player6,Player9,Player4
陣列2 - 會員總數= PLAYER1,Player2,Player3,Player4,Player6,Player9

將返回沒有什麼區別,但

陣列1 - 活躍會員= PLAYER1,Player4,Player3
陣列2 - 會員總數= Player2,Player3

將返回PLAYER1和Player4,然後添加他們陣列2陣列2:
玩家2,玩家3,玩家1,玩家4

我知道這真的令人困惑,但我不能包裝我的頭如何讓這個工作!

下面是一些僞代碼來證明什麼,我想:

if Array1[x] is found in Array2 
ignore 

but 

if Array1[x] is not found in Array2 
add the value of [x] to the end of Array2 

我使用谷歌的腳本來在谷歌電子表格電子表格代碼在這裏是我的代碼的基本輪廓:

for (var i=0;i<=range.length;i++){ 
var playerName = sheetWAR.getRange(i+4,4).getValue(); // first 3 rows are for information 
} 

其中range是一個值,我插入查看Browser.inputBox命令。

然後我拿這個數據,並將其粘貼到另一個工作表:

for (var j=0;j<=playerName.length;j++){ 
sheetRANK.getRange(j+2,3).setValue(playerName[j]); 
} 

好,現在我想利用這些值,並將它們與列表進行比較(即默認爲空!

var maxRow = sheetRANK.getLastRow(); 
for (var k=0; k<=maxRow; k++){ 
var activeRange = sheetRANK.getRange(k,1).getValue(); 
} 

activeRange =數組2
playerNumber =數組1

我都試過下面的建議,這裏發生了什麼:

If I have these values for each array: 

activeRange = {"Viper", "Cobra", "Diamondback", "Python"} 
and 
playerName = {"Viper", "Cobra", "Anaconda", "Diamondback", "Python"} 

resulting activeRange = {"Viper", "Cobra", "Diamondback", "Python", "", "", "Anaconda", "undefined"} 

for both of the posted solutions. 

我沒有意識到,我上面複製1將playerName放入數組中,所以for循環中的一個簡單的playerName.length-1解決了這個問題,另一個問題是編譯列表中出現了一個空白區域:這可能是新到JavaScript的最佳示範柯。我只是忘記了我使用lastRow作爲長度,所以如果activeRange(array2)中的值少於playerNum(array1)中的值,它會複製到array1中的最後一行,這將成爲array2中的空格,那麼一旦它將這兩個數組編譯在一起,並且array2在array1之前,那麼空格將會分隔這兩個數組。

+0

你要什麼的行爲是當用戶在第一陣列中沒有找到,但第二陣列中被發現? – usandfriends

+0

請寫一些代碼來實現你想要的,然後在這裏發佈一個精確的_error_。 – Ejaz

+0

如果用戶不在活動成員(數組1)中,但在總成員(數組2)中,我希望它只是被忽略。只有在陣列1中存在成員時,纔會出現總會員不存在的情況。我很感謝你的迴應! – user5349418

回答

0

希望這有助於:

var arr1 = ["Player1", "Player4", "Player3"]; 
var arr2 = ["Player2", "Player3"]; 

arr1.forEach(function(player) { 
    if(arr2.indexOf(player) == -1) arr2.push(player); 
}); 
console.log(arr2); 

// ["Player2", "Player3", "Player1", "Player4"] 
+0

我試過這個無濟於事。我用更多的信息更新了我的主帖。儘管我感謝你的幫助! – user5349418

+0

剛剛意識到我說的「無濟於事」就是我的一部分。你的代碼工作完美,謝謝一堆!我從來沒有想過這件事! – user5349418

相關問題