将每个字符显示为数组的映射函数
Map function displaying each character as an array
我的数组中有一些字符串,形式为退出调查 [hr.exitinterview]、证书 [hr.certificate]、推荐信 [hr.recommendation] 我需要提取仅从现有字符串 hr.exitinterview、hr.certificate、hr.recommendation 并将另一个字符串 https://somelink/hr.exitinterview, https://somelink/hr.certificate, https://somelink/hr.recommendation 添加到每个子字符串,并将它们 return 添加到另一个函数作为数组。我已经尝试使用子字符串并能够提取 []
之间的数据,但是当我尝试使用 map
函数将数组的内容附加到 https://somelink/
时,即使我能够附加它,它将每个字符显示为数组的单独内容,即 [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(", ")
使您的函数 return 成为字符串,而不是数组。
以下修改后的函数对我有用,return是一个字符串数组
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);
}
我的数组中有一些字符串,形式为退出调查 [hr.exitinterview]、证书 [hr.certificate]、推荐信 [hr.recommendation] 我需要提取仅从现有字符串 hr.exitinterview、hr.certificate、hr.recommendation 并将另一个字符串 https://somelink/hr.exitinterview, https://somelink/hr.certificate, https://somelink/hr.recommendation 添加到每个子字符串,并将它们 return 添加到另一个函数作为数组。我已经尝试使用子字符串并能够提取 []
之间的数据,但是当我尝试使用 map
函数将数组的内容附加到 https://somelink/
时,即使我能够附加它,它将每个字符显示为数组的单独内容,即 [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(", ")
使您的函数 return 成为字符串,而不是数组。
以下修改后的函数对我有用,return是一个字符串数组
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);
}