Как мне посчитать эти слова, используя скрипт в гугл листах? - PullRequest
0 голосов
/ 06 февраля 2020

Я хотел бы посчитать число вхождений одного слова в строке, но Google Sheets выдает ошибку, что он не может справиться с выражением:

finalScores.push(preOutputTxt.match(nameArr[x])).length);   

, потому что есть где-то ноль Как я могу это исправить? Полный код:

/**
*   
*   
* 
* @customFunction
*/

function scoreCounting(scores, names){
  //---variables---//
  var scoresArr = [];
  var preOutputTxt = "";
  var finalScores = [];
  var nameArr = [];
  //---------------//


  //---creating an array from names and scores (scores are in string type)---//
  for(var w = 0; w < scores.length; w ++){
    scoresArr.push(scores[w]);
  }
  for(var z = 0; z < names.length; z++){
    nameArr.push(names[z]);
  }
  //---------------------------------------//


  //---make one big string with names---//
  for(var y = 0; y < scoresArr.length; y++){
   preOutputTxt += scoresArr[y];
  }
  //----------------------------------------------//


  //---counting how many times score (a name) occur, basing on name given by nameArr[]---//
  for(var x = 0; x < nameArr.length; x++){ 
    finalScores.push(preOutputTxt.match(nameArr[x])).length); 
  }

  return finalScores;
}

1 Ответ

0 голосов
/ 06 февраля 2020

Как упомянул Тединоз, было бы проще предложить конкретную c помощь, если бы вы могли поделиться электронной таблицей.

Но в то же время вот два фрагмента, помогающие объяснить, как получить количество слов в более длинной строке.

Пример 1. Если вы используете match() с именем в качестве ввода, вы получите только первое совпадение.

[Это потому, что метод ожидает регулярного выражение. И передача строки (или переменной, установленной в строку) похожа на регулярное выражение без модификатора.]

function example1() {
  var preOutputTxt = 'abcabcabc';
  var name  = 'abc';
  var output = preOutputTxt.match(name);
  Logger.log('Output is %s. Length is %s.', output, output.length);
}

// Output is [abc]. Length is 1.0.

Пример 2: Но если вы используете регулярное выражение с глобальным модификатором, вы получите все матчи.

function example2() {
  var preOutputTxt = 'abcabcabc';
  var name  = 'abc';
  var re = new RegExp(name, 'g');
  Logger.log('Regular expression is %s', re);
  var output = preOutputTxt.match(re);
  Logger.log('Output is %s. Length is %s.', output, output.length);
}

// Regular expression is /abc/g
// Output is [abc, abc, abc]. Length is 3.0.
...