如何从字符串中获取子字符串并将另一个字符串附加到字符串并将其转换为数组

问题描述 投票:1回答:1

我在数组中有一些字符串,其形式为Exit Survey [hr.exitinterview], Certificate [hr.certificate], Recommendation Letter [hr.recommendation]我需要从现有字符串中仅提取hr.exitinterview, hr.certificate, hr.recommendation,并将另一个字符串https://somelink/hr.exitinterview, https://somelink/hr.certificate, https://somelink/hr.recommendation添加到每个子字符串,并将它们作为数组返回到另一个函数。我试过尝试使用substring并将新字符串添加到数组中,但它只是显示,,,,,。我可以知道为什么或代码有什么问题,我还在学习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 extractedLinks = extractLinks(data);
  }
  if (extractedLinks.length > 0) {
    return extractedLinks;
  }
  else
  {
    return -1;
  }
  return -1;
}

function extractLinks(link) {
  var extractedLinks = [];
  for (var i = 0; i < link.length; i++) {
    link[i] = JSON.stringify(link[i]);
    extractedLinks.push(link[i].substring(link[i].lastIndexOf("["),link[i].lastIndexOf("]")));
    extractedLinks.map(function(a) { return "https://somelink/" + a; }).join("");
  }
  return (extractedLinks);
}
javascript google-apps-script gsuite
1个回答
1
投票

使用正则表达式提取方括号之间的值,然后mapjoin它们:

const inputs = [
'Exit Survey [hr.exitinterview], Certificate [hr.certificate], Recommendation Letter [hr.recommendation]',
'Exit Survey [aaa], Certificate [bbb], Recommendation Letter [ccc]',
'Exit Survey [qqqqq], Certificate [qwert], Recommendation Letter [12345]',
];
const outputs = inputs.map((input) => {
  const strings = input.match(/[^\[\]]+(?=\])/g);
  const newFullStr = strings
    .map(str => 'https://somelink/' + str)
    .join(', ');
  return newFullStr;
});
console.log(outputs);

在大多数情况下,数组方法远远优于for循环。

© www.soinside.com 2019 - 2024. All rights reserved.