使用数组

时间:2017-10-16 02:46:18

标签: google-apps-script

我在单元格C2中有一个长字符串,在字符串长度上多次匹配(#) - 我想从我的数组对象“rand”为每个匹配分配一个值。然后将我的新字符串重写回单元格C2。

我的示例字符串可以是“这是一个字符串#,这也是一个字符串#,但这也是一个字符串#”

我想将rand数组中的随机值添加到“#”

的每个实例中
function mergeAll() {

  var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("1iXQxyL3URe1X1FgbZ76mEFAxLnxegyDzXOMF6WQ5Yqs"));
  var sheet1 = doc.getSheetByName("tabla de porcentajes");
  var sheet2 = doc.getSheetByName("preoutput");
  var sheet3 = doc.getSheetByName("output") ;

  var range = sheet2.getDataRange();
  var data = sheet2.getDataRange().getValues();

  for(var i = 0; i<data.length;i++){
    var rand = [[" así como "],[" también "],[" asimismo "],[" igualmente "],[" asimismo "],[" de igual modo "],[" de igual manera "],[" de igual forma "],[" del mismo modo "],[" por su parte "],[" de la misma manera "],[" de la misma forma "],[" por otro lado "]];
    var randomIndex = Math.floor(Math.random() * rand.length);
    var aditivo = rand.splice(randomIndex,1);
  }
  sheet3.getRange("C2").setValue(data.join("#"));
  var obj = sheet3.getRange("C2").getValue();
  var count = (obj.match(/#/g) || []).length;

  for (var j = 0; j < count; j++) {
    var string = obj.replace(/#/g,aditivo);
    aditivo[count++];
    sheet3.getRange("C2").setValue(string);
  }
}

1 个答案:

答案 0 :(得分:1)

看起来你正在过度思考这个,希望这个解决方案和解释会有所帮助。

您在实施中编写的循环存在一些问题。在第一个中,您每次迭代都会重新声明变量,因此aditivo()的最终值是在上一次迭代中设置的值。另一个循环是无限的,因为您使用aditivo[counter++]每次迭代递增计数器变量,因此j始终小于counter

此外,您的字符串替换不能按预期工作。你正在取代每一次&#39;#&#39;使用数组aditivo()的内容。在您当前的代码aditivo()中只有1个值,但如果aditivo()有更多成员,则替换会将所有放在每个子字符串之间。

最后你实际上并不需要任何循环来做你需要的事情:你所要做的就是使用函数来运行你的连接字符串的全局替换,以返回随机替换字符串,而不是使用固定更换。这是一个快速实现,我希望这可以做你想要的 - 你可以写一个更好的:

function mergeAll() {    
  var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("<obfucscated>"));
  var sheet1 = doc.getSheetByName("tabla de porcentajes");
  var sheet2 = doc.getSheetByName("preoutput");
  var sheet3 = doc.getSheetByName("output") ;
  var data = sheet2.getDataRange().getValues();
  var str = data.join("#"); // join your data array into one string
  // make rand[] into a 1-dimensional array so that we can address the elements more easily

  var rand = [" así como "," también "," asimismo "," igualmente "," asimismo "," de igual modo "," de igual manera "," de igual forma "," del mismo modo "," por su parte "," de la misma manera "," de la misma forma "," por otro lado "];

  // now do the global replace on str, 
  //   but use a function to give us a random replacement string
  str = str.replace(/#/g, function(m){ return rand[Math.floor(Math.random()*rand.length)]; });

  // now write the updated str back to the spreadsheet
  sheet3.getRange("C2").setValue(str);
}