Zapier Javascript:意外令牌] - 在 IDE、Repl.it 和 Node v6.3.1 中工作

Zapier Javascript: Unexpected token ] - working in IDE, Repl.it, & Node v6.3.1

解决方案:

感谢@Kunal Mukherjee 的帮助。

const pattern = /\](,)\s{2,}?/gm
let res = inputData.rows.replace(pattern, (match, group1, offset, string) => "]")
            .split(/\s{2,}/gm)
            .map(x => JSON.parse(x));

res = res[0];   //reassign to scrape an array layer
let resultString = '';

for (let i = 0; i < res[0].length; i += 1) {
  let cv = res[0][i];
  if (cv.length === 0) resultString += `    ${res[1][i]}: ${inputData.rows[2][i]}\n`
  else resultString += `${cv}\n    ${res[1][i]}: ${res[2][i]}\n`;
}

output = {KPI: resultString};

原文Post:

问题

在 Zapier Zap 中,我从 Google 表格中提取数据并使用 JS 对其进行美化,以便稍后发送电子邮件。我遇到了以下消息的错误:

SyntaxError: Unexpected token ]

  stringOfArraysToArrayOfArrays (eval at <anonymous> (/var/task/index.js:52:23), <anonymous>:22:52)
  theFunction (eval at <anonymous> (/var/task/index.js:52:23), <anonymous>:29:18)
  eval (eval at <anonymous> (/var/task/index.js:52:23), <anonymous>:51:20)
  Domain.<anonymous> (/var/task/index.js:53:5)
  Domain.run (domain.js:242:14)
  module.exports.handler (/var/task/index.js:51:5)

我试过的

我已成功 运行 将此代码从最新版本的 Node 返回到不同环境中的 Node v6.3.1 - 本地 IDE、Repl.It IDE , 以及在线 IDE 设置为 Node v6.3.1。他们都清楚。我也试过清除所有 ES6+ 语法的代码(没有示例数据)

数据示例

let inputData = {
  rows: `["Prioritized Tasks", "", "", "", "Operational Tasks", "", "", "", "Eight Dimensions", "", "", "", "", "", "", "", "Burn-Out", "", "", "", "", "", "", "", "", "", "Violations"], 
    ["Completion Rate", "Avg Completed", "Avg Total Scheduled", "Avg Time Spent", "Completion Rate", "Avg Completed", "Avg Total Scheduled", "Avg Time Spent", "Emotional", "Environmental", "Financial", "Intellectual", "Occupational", "Physical", "Social", "Spiritual", "Feeling Stressed", "Feeling Depleted", "Having Trouble Concentrating", "Feeling Forgetful", "Wanting to avoid social situations", "Feeling pessimistic", "Feeling cynical", "Feeling apathetic or disinterested", "Not feeling engaged with my work", "My overall energy level", "Temperance", "Silence", "Order", "Resolution", "Frugality", "Industry", "Sincerity", "Justice", "Moderation", "Cleanliness", "Tranquility", "Chastity", "Humility"], 
    ["70.33", "4", "6.67", "380", "3.67", "3.67", "66.67", "100", "8", "5.33", "5.67", "4.67", "4", "5", "4.67", "6.67", "1.33", "4", "5", "4.67", "3.33", "3.33", "1.33", "5", "6", "5.67", "0.3333333333", "0.3333333333", "0.3333333333", "0", "1", "0", "0", "0", "0", "0.3333333333", "0.3333333333", "0.3333333333", "0.3333333333"]`
}

产生错误的代码

function stringOfArraysToArrayOfArrays(string) {
  let arrayPointers = [0, 1];
  let arrOfArr = [];
  
  for (let i = 0; i < string.length; i += 1) {
    let cv = string[i];
    if (cv === "[") arrayPointers[0] = i;
    else if (cv === "]") {
      arrayPointers[1] = i + 1;
      arrOfArr.push(string.slice(arrayPointers[0], arrayPointers[1]));
      arrOfArr[arrOfArr.length - 1] = eval(arrOfArr[arrOfArr.length - 1]);
    }
  }

  return arrOfArr;
}

inputData.rows = stringOfArraysToArrayOfArrays(inputData.rows);

let resultString = '';

for (let i = 0; i < inputData.rows[0].length; i += 1) {
  let cv = inputData.rows[0][i];
  if (cv.length === 0) resultString += '    ' + inputData.rows[1][i] + ':  ' + inputData.rows[2][i] + '\n';
  else resultString += cv + '\n    ' + inputData.rows[1][i] + ':  ' + inputData.rows[2][i] + '\n';
}

output = {KPI: resultString};

预期结果

我希望代码成为 运行,首先,然后我希望 output.KPI 成为一个美化的字符串。

感谢您的宝贵时间和帮助:)

这种方法可能有点实用。

你需要先把每一行的],替换成一个空字符串我用这个Regex来拆分它。

之后,我用超过 2 个字符的空格拆分字符串。

然后最后我用.map投射在拆分的项目上以解析它并制作一个数组数组。

const inputData = {
  rows: `["Prioritized Tasks", "", "", "", "Operational Tasks", "", "", "", "Eight Dimensions", "", "", "", "", "", "", "", "Burn-Out", "", "", "", "", "", "", "", "", "", "Violations"], 
    ["Completion Rate", "Avg Completed", "Avg Total Scheduled", "Avg Time Spent", "Completion Rate", "Avg Completed", "Avg Total Scheduled", "Avg Time Spent", "Emotional", "Environmental", "Financial", "Intellectual", "Occupational", "Physical", "Social", "Spiritual", "Feeling Stressed", "Feeling Depleted", "Having Trouble Concentrating", "Feeling Forgetful", "Wanting to avoid social situations", "Feeling pessimistic", "Feeling cynical", "Feeling apathetic or disinterested", "Not feeling engaged with my work", "My overall energy level", "Temperance", "Silence", "Order", "Resolution", "Frugality", "Industry", "Sincerity", "Justice", "Moderation", "Cleanliness", "Tranquility", "Chastity", "Humility"], 
    ["70.33", "4", "6.67", "380", "3.67", "3.67", "66.67", "100", "8", "5.33", "5.67", "4.67", "4", "5", "4.67", "6.67", "1.33", "4", "5", "4.67", "3.33", "3.33", "1.33", "5", "6", "5.67", "0.3333333333", "0.3333333333", "0.3333333333", "0", "1", "0", "0", "0", "0", "0.3333333333", "0.3333333333", "0.3333333333", "0.3333333333"]`
};

const pattern = /\](,)\s{2,}?/gm
const res = inputData.rows.replace(pattern, (match, group1, offset, string) => "]")
            .split(/\s{2,}/gm)
            .map(x => JSON.parse(x));

const output = { KPI: res };

console.log(output);