javascript - 将每个字符显示为数组的 Map 函数

标签 javascript arrays google-apps-script google-workspace

我的数组中有一些字符串,其形式为退出调查 [hr.exitinterview]、证书 [hr.certificate]、推荐信 [hr.recommendation] 我只需要提取 hr.exitinterview、hr.certificate 、 hr.recommendation 从现有字符串中添加另一个字符串 https://somelink/hr.exitinterview , https://somelink/hr.certificate , https://somelink/hr.recommendation到每个子字符串并将它们作为数组返回到另一个函数。我已经尝试使用子字符串,并且能够提取 [] 之间的数据,但是当我尝试使用 https://somelink/ 附加数组的内容时map 函数,即使我能够附加它,它也会将每个字符显示为数组的单独内容,即 [h,t,t,p,s,:,/,/, s,o,m,e,l,i,n,k,/,h,r,.,e,x,i,t,i,n,t,e,r,v,i,e,w, h,t,t,p,s,:,/,/,s,o,m,e,l,i,n,k,/,h,r,.,c,e,r,t,i, f,i,c,a,t,e,h,t,t,p,s,:,/,/,s,o,m,e,l,i,n,k,/,h,r, .,r,e,c,o,m,m,e,n,d,a,t,i,o,n]。而不是 [https://somelink/hr.exitinterview, https://somelink/hr.certificate, https://somelink/hr.recommendation] 我可以知道代码有什么问题吗,我还在学习JS,如果这是一个愚蠢的问题,请忽略。

var sheet = SpreadsheetApp.getActive().getSheetByName("Form Responses 2");
var data = sheet.getDataRange().getValues();
var currentTime = new Date();
Logger.log('currentTime:'+ currentTime);
for (var i = 1; i < data.length; i++) {
    var checkbox = data[i][7];
    var links = extract(checkbox);
    Logger.log('New links: ' + links);
  }
}

function extract(data) {
  var lengthOfData = [ data.length];
  if (lengthOfData > 0) {
    var fullLink = extractLinks(data);
  }
  if (fullLink.length > 0) {
    return fullLink;
  }
  else {
    return -1;
  }
  return -1;
}

function extractLinks(link) {
  var extractedLinks = [];
  var fullLink = [];
  for (var i = 0; i < link.length; i++) {
    link[i] = JSON.stringify(link[i]);
    extractedLinks.push(link[i].substring(link[i].lastIndexOf("[")+1,link[i].lastIndexOf("]")));
    fullLink = extractedLinks.map(function(a) { return "https://somelink/" + a; }).join(", ");
    Logger.log('fullLink: ' + fullLink);
  }
  return (fullLink);
}

最佳答案

函数 extractLinks 中的循环应在“fullLink = ...”之前关闭

您还可以使用正则表达式来匹配括号之间的字符串(但这只是个人喜好的问题。最后,最后的 .join(", ") 使您的函数返回一个字符串,而不是一个数组。

以下修改后的函数对我有用,并返回一个字符串数组

function extractLinks(link) {
  var extractedLinks = [];
  var fullLink = [];
  for (var i = 0; i < link.length; i++) {
    link[i] = JSON.stringify(link[i]);
    extractedLinks.push(link[i].match(/\[(.*?)\]/)[1]);
    }
  fullLink = extractedLinks.map(function(a) { return "https://somelink/" + a; })
  Logger.log('fullLink: ' + fullLink);
  return (fullLink);
}

关于javascript - 将每个字符显示为数组的 Map 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49886964/

相关文章:

javascript - 从 href jquery 加载特定的 div

javascript - 无法在 Chart.js 中设置全局选项

java - 将数据从文本文件加载到数组中

javascript - 删除电子表格中今天日期应用程序脚本之前的日期

javascript - 谷歌地图 API : SVG Marker moves relative to map when you zoom

javascript - 将背景图像添加到单元格和单元格所在的行

php - 通过发布的数组过滤数据?

Java数组随机存储对象

javascript - For 循环增加其他变量太多次

google-apps-script - 使用脚本复制公式