如何在JavaScript中找到两个数组之间的差异?

时间:2015-09-18 07:27:36

标签: javascript arrays google-sheets

我是一名新的JavaScript用户,但我的任务是为我的社区创建一个电子表格,看起来我遇到了麻烦。我一直在使用Google Scripts和Google表格(所以我的社区也可以看到这些信息)。

基本上我有两个阵列,都填充了玩家列表。

  1. 我的第一个数组中填充了一系列活跃玩家,这些玩家每隔一天就会更改一次。有些人放弃,有些人被添加,有些人留在名单上。

  2. 我的第二个数组用于跟踪每个人,因此它包含所有以前成员的列表。

  3. 我的问题: 假设我的第二个数组包含值“Player1”,“Player2”和“Player3”,我的第一个数组包含值“Player1”,“Player2”和“Player3”。

    现在考虑第一个数组中的更改,可能是Player1被删除,并且添加了Player 4(按随机顺序),其中第二个数组包含“Player1”,“Player2”和“Player3”,但是我的第一个数组包含值“Player4”,“Player2”和“Player3”。我想要一个比较两个数组(以任何顺序)的东西,并返回第一个数组和第二个数组之间的差异,然后将它们添加到第二个数组。

    IE:
    数组1 - 活动成员= Player1,Player2,Player3,Player6,Player9,Player4
    数组2 - 总成员= Player1,Player2,Player3,Player4,Player6,Player9

    会返回NO差异,但

    阵列1 - 活跃成员= Player1,Player4,Player3
    数组2 - 总成员= Player2,Player3

    将返回Player1和Player4,然后将它们添加到数组2以生成数组2:
    Player2,Player3,PLAYER1,Player4

    我知道这真的令人困惑,但我无法理解如何让它发挥作用!

    这是一些伪代码来演示我想要的东西:

    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
    

    我正在使用Google脚本为Google电子表格中的电子表格编码,这是我的代码的基本概要:

     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 = Array2
    playerNumber = Array1

    我已经尝试了下面的两个建议,接下来会发生什么:

    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.
    

    我没有意识到我已将playerName上面的1复制到数组中,因此for循环中的一个简单的playerName.length-1解决了这个问题,另一个问题是在编译列表中出现了一个空格:这个可能是新到JavaScript错误的最好证明。我只是忘了我使用lastRow作为长度,所以如果我在activeRange(array2)中的值少于在playerNum(array1)中的值,它将向下复制到array1中的最后一行,这将是array2中的空白区域,然后一旦将这两个数组一起编译,其中array2在array1之前,空格就会将两者分开。

1 个答案:

答案 0 :(得分: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"]