2017-10-16 44 views
-2

我在单元格C2中使用匹配(#)多个字符串长度的长字符串 - 我想为每个匹配项分配一个值,从我的数组对象“兰德”。然后将我的新字符串重新写回到单元格C2。用数组中的随机值替换字符串中的每个匹配项

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

我想从我的兰特阵列添加一个随机值的每个实例“ #”

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); 
    } 
} 
+0

这是一个不完整的例子。术语数据未定义。 – Cooper

+0

我认为缩短相关部分的代码会有帮助,所以我现在已经包含了整个代码。我也更新了说明。 –

回答

1

看起来像你这样得太多之一,希望这个解决方案&解释会有所帮助。

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

此外,您的字符串替换未按预期工作。您正在使用数组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); 
} 
+0

这很棒,因为您已经简化了几行解决方案。十分优雅。感谢您的教训。我选择你的答案是最好和最正确的答案! –

相关问题