如何比较(并添加,如果不存在)来自Google App Script的2个阵列的元素?

时间:2018-06-01 11:42:19

标签: javascript arrays google-apps-script

每个人我都试图找到比较两个数组的最佳方法,并添加一个值为0的新元素,如果它们之间存在任何差异。首先我得到了这两个阵列:

  var niv = ["FB","Bach","FPSE","FPPE","AA"];
  var values = [["H", "FB", 3286.25, 509.75],["H", "Bach", 4587.5, 522.5],
    ["H", "FPPE", 160, 2624],["H", "AA", 334, 7454],
    ["M", "FB", 3803.75, 1743.25],["M", "Bach", 7856.5, 709.5],
    ["M", "FPPE", 799, 3785],["M", "AA", 1055, 11718,2],["N", "FB", 45, 0.0, 0.0]];

这是我尝试做的一个不好的例子:

  for (var i = 0; i < data.length; i++) {
    for (var j = 0; j < values.length; j++) {
      if (data[i][0] == values[j][0] && 
        (values[i][1] == "FB" || values[i][1] == "Bach" || 
         values[i][1] == "FPSE" || values[i][1] == "FPPE" || values[i][1] == "AA")) {
        data[i].push(values[j][2],values[j][3])
      } else {
       data[i].push(0,0)
    }
  }

}

我想要的就是:

[["H", "FB", 3286.25, 509.75],["H", "Bach", 4587.5, 522.5],
 ["H", "FPSE", 0.0, 0.0],["H", "FPPE", 160, 2624],
 ["H", "AA", 334, 7454],["M", "FB", 3803.75, 1743.25],["M", "Bach", 7856.5, 709.5],
 ["M", "FPSE", 0.0, 0.0],["M", "FPPE", 799, 3785],
 ["M", "AA", 1055, 11718,2],["N", "FB", 45, 0.0],["N", "Bach", 0.0, 0.0],
 ["N", "FPSE", 0.0, 0.0],["N", "FPPE", 0.0, 0.0],["N", "AA", 0.0, 0.0]];

1 个答案:

答案 0 :(得分:0)

我希望我不迟到。

我认为你应该把工作分成几个部分,这样才能达到目标。

从具有以下信息的两个数组开始:niv和值

 var niv = ["FB","Bach","FPSE","FPPE","AA"];
 var values = [["H", "FB", 3286.25, 509.75],["H", "Bach", 4587.5, 522.5],
    ["H", "FPPE", 160, 2624],["H", "AA", 334, 7454],
    ["M", "FB", 3803.75, 1743.25],["M", "Bach", 7856.5, 709.5],
    ["M", "FPPE", 799, 3785],["M", "AA", 1055, 11718,2],["N", "FB", 45, 0.0, 0.0]];

我建议数组值分成 3个数组,一个用于H,另一个用于M,另一个用于N.

 var man = [];
 var wom = [];
 var unk = [];  

 for (var i = 0; i < values.length; i++){
   if (values[i][0] == "H") man.push(values[i]);
   if (values[i][0] == "M") wom.push(values[i]);
   if (values[i][0] == "N") unk.push(values[i]);
 }

然后,这是一个通过数组并检查值是否对应于数组niv的问题。为了验证这一点,我建议您创建一个函数,它接收一个数组和一个字符串,其中包含搜索,如果找到与否,则返回true或false 。< / p>

知道是否,您可以在数组中添加新元素。使用 splice 方法,元素将添加到应该位于的位置。有了这个,你将有3个完整和有序的数组。

 for (var i = 0; i < niv.length; i++){  
   if(!checkArray(man,niv[i])){
     man.splice(i,0,["H",niv[i],0,0]);
   }
 }

 for (var i = 0; i < niv.length; i++){
   if(!checkArray(wom,niv[i])){
     wom.splice(i,0,["M",niv[i],0,0]);
   }
 }

 for (var i = 0; i < niv.length; i++){
   if(!checkArray(unk,niv[i])){
     unk.splice(i,0,["N",niv[i],0,0]);
   }
 }

 function checkArray (array, niv){
    for (var i = 0; i < array.length; i++){
        if(array[i][1] === niv){
            return true;
        }
    }
    return false;
 }

我希望我帮助