比较两个数组,如果在另一个数组中找到值,则将值设置为True

时间:2017-07-17 12:02:31

标签: javascript arrays google-apps-script

我有两个数组 A = [1,5,9,12,14],B = [16,4,8,12] 两个阵列都有不同的长度。我想将数组A与B进行比较。如果数组A的值在B中可用,则不要做任何其他事情将其添加到工作表中。 下面是我的相同代码,但我没有获得所需的输出。 任何人都可以帮助我吗?

Capybara.register_driver :chrome do |app|
  args = ["--disable-notifications"]
  Capybara::Selenium::Driver.new(app, {:browser => :chrome, :args => args})
end

2 个答案:

答案 0 :(得分:1)

Sheet.appendRow() method只接受mono dimensionnal数组,因为它只在工作表后添加一行。您必须浏览列表才能附加数据。如文档所述:

  

在电子表格中添加一行。这个操作是原子的;它   防止用户请求最后一行的问题,然后   写入该行,并在其间发生干扰突变   获取最后一行并写入。

以下是代码示例:

编辑: 正如@charlietfl指出的那样,之前还有其他问题:每次循环A阵列时都会实例化数据阵列。

正在修改代码以纠正此问题。

function updateTicketsAreNotInDeploymentDoc() {
  var A = getJiraNoFromJira();
  var B = getJiraNoFromDoc();
  var data = new Array();
  for(var i = 0; i<A.length; i++) {
    var Found = false;
    for(var j=0; j<B.length; j++) {
      if(A[i] == B[j]) {
        Logger.log("found="+A[i]); 
        Found = true;
      }
    } 
    if(Found == false){
      data.push(A[i]);
    }
  }  

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName(RESULTANT_DEPLOYMENT_SHEET);

  for(var k = 0; k<data.length; k++){
    sheet.appendRow([data[k]]);
  }
}

答案 1 :(得分:0)

这是更快的版本,只是为了好玩:p 大阵列(超过30k元素)的性能差异很严重。

function compareArrays()
{
  var obj = {};
  var result = [];
  var A = [1,5,9,12,14];
  var B = [16,4,8,12];

  for (var i = 0; i < A.length; ++i)
  {
    obj[A[i]] = true;
  }

  for (var i = 0; i < B.length; ++i)
  {
    if (obj[B[i]] == undefined)
    {
      result.push([B[i]]);
    }
  }
  SpreadsheetApp.openById("id").getRange("A1:A" + result.length).setValues(result);
}