Как сравнить (и добавить, если не существует) элементы из 2 массивов в Google App Script? - PullRequest
0 голосов
/ 01 июня 2018

каждый Я пытаюсь найти лучший способ сравнить два массива и добавить новый элемент со значением 0, если между ними есть какая-либо разница.Сначала я получил 2 массива:

  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 голосов
/ 04 июня 2018

Надеюсь, я не опоздал.

Думаю, вам следует разделить работу на несколько разделов, чтобы не было так сложно достичь цели.

Начиная с двух массивовс информацией: 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 , если он найдет это или нет.

Зная, если это так или нет, вы можете добавить новый элемент в массив.При использовании метода 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;
 }

Надеюсь, я помог

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...