首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个JavaScript在扎皮尔循环两次?

为什么这个JavaScript在扎皮尔循环两次?
EN

Stack Overflow用户
提问于 2018-05-28 13:37:54
回答 2查看 201关注 0票数 1

这是一个视频,它展示了我正在挣扎的东西。

下面是对这个过程的高级描述,然后是我编写的实际JavaScript代码。

PROCESS我构建了两个Zaps,每个Zaps都是这样运行的:

步骤1-触发器(具有重复部分的认知形式)

步骤2- JavaScript代码(它为一个重复部分创建表单字段的数组,并使用.split将它们分离成单独的字符串)

步骤3-操作(为每个字符串创建一个ZOHO任务)

第一个Zap运行在表单的一个部分(使用Sales访问),第二个zap运行在表单的另一个部分(访问没有销售)。每个Zaps都可以单独工作,所以我知道代码很好,但是我想通过合并代码将这两个Zaps组合成一个。

我试着通过五个步骤结合起来:

触发器- Code1 - Zoho1 - Code2 - Zoho2

但是每个Zoho2任务都是重复的

然后我试着重新排序这五个步骤:

触发器- Code1 - Code2 - Zoho1 - Zoho2

但是现在Zoho1任务和Zoho2任务被复制了。

最后,我尝试将所有JavaScript代码合并成一个:

跳跳虎- CombinedCode1+2 - Zoho 1- Zoho2

但是,当我在Zoho1中映射数组时,只有“Zoho1”中的数组中的字符串对我可用。

代码:

代码语言:javascript
复制
if (inputData.stringVSAccount == null) {
  var listVSAccountArray = [];
  var listVSUnitsArray = [];
  var listVSPriceArray = [];
  var listVSNotesArray = [];
  var listVSVisitCallArray = [];
} else {
  var listVSAccountArray = inputData.stringVSAccount.split(",");
  var listVSUnitsArray = inputData.stringVSUnits.split(",");
  var listVSPriceArray = inputData.stringVSPrice.split(",");
  var listVSNotesArray = inputData.stringVSNotes.split(",");
  var listVSVisitCallArray = inputData.stringVSVisitCall.split(",");
}
var output = [];
var arrayNos = listVSAccountArray.length;
var i = 0;
do {
  var thisItemVSAccount = new String(listVSAccountArray[i]);
  var thisItemVSUnits = new String(listVSUnitsArray[i]);
  var thisItemVSPrice = new String(listVSPriceArray[i]);
  var thisItemVSNotes = new String(listVSNotesArray[i]);
  var thisItemVSVisitCall = new String(listVSVisitCallArray[i]);
  var thisItemObj = {};
  thisItemObj.itemVSAccount = thisItemVSAccount;
  thisItemObj.itemVSUnits = thisItemVSUnits;
  thisItemObj.itemVSPrice = thisItemVSPrice;
  thisItemObj.itemVSNotes = thisItemVSNotes;
  thisItemObj.itemVSVisitCall = thisItemVSVisitCall;
  output.push({ thisItemObj });
  i++;
} while (i < arrayNos);

//This is where the second zaps code is pasted in the combined version
if (inputData.stringOVAccount == null) {
  var listOVAccountArray = [];
  var listOVNotesArray = [];
  var listOVVisitCallArray = [];
} else {
  var listOVAccountArray = inputData.stringOVAccount.split(",");
  var listOVNotesArray = inputData.stringOVNotes.split(",");
  var listOVVisitCallArray = inputData.stringOVVisitCall.split(",");
}
var output = [];
var arrayNos = listOVAccountArray.length;
var i = 0;
do {
  var thisItemOVAccount = new String(listOVAccountArray[i]);
  var thisItemOVNotes = new String(listOVNotesArray[i]);
  var thisItemOVVisitCall = new String(listOVVisitCallArray[i]);
  var thisItemObj = {};
  thisItemObj.itemOVAccount = thisItemOVAccount;
  thisItemObj.itemOVNotes = thisItemOVNotes;
  thisItemObj.itemOVVisitCall = thisItemOVVisitCall;
  output.push({ thisItemObj });
  i++;
} while (i < arrayNos);

这周我刚开始学习JavaScript,我觉得自己缺少了一些显而易见的东西,也许是一组括号。谢谢你的帮助

EN

回答 2

Stack Overflow用户

发布于 2018-05-30 19:47:07

大卫在这里,来自萨皮尔平台团队。您将遇到一个令人困惑且基本上没有文档记录的特性,在此特性中,每个项目在代码步骤后运行返回。这通常是需要的行为--当你返回3份意见书时,你想要创建3条记录。

在您的示例中,它还多次运行后续的无关操作,这听起来不太理想。在这种情况下,可能更容易有2次重击。或者,如果"Zoho2“只发生过一次,那么把它放在第一位,让分支发生在下游。

另外,我有一些未经请求的javascript建议(因为您提到您是初学者)。查看Array.forEach (文档),它允许您迭代数组,而不必管理同样多的变量(每次都是您自己的i )。此外,在可能的情况下,尝试使用letconst超过var --它使变量的作用域尽可能小,这样就不会意外地将值泄漏到其他区域。

​,如果你还有其他问题,请告诉我!

票数 0
EN

Stack Overflow用户

发布于 2018-05-30 19:53:14

只需注意--在代码块的两个段中声明相同的数组变量output --第二个声明将被忽略。

使用.forEach()方法对数组进行迭代,将显着地清理代码。您也不需要费力地构造要推入output数组中的对象。

这可能不能解决您的问题,但代码要简单得多。

代码语言:javascript
复制
var listVSAccountArray = [],
    listVSUnitsArray = [],
    listVSPriceArray = [],
    listVSNotesArray = [],
    listVSVisitCallArray = [],
    output = [];

if (typeof inputData.stringVSAccount === 'string') {
  listVSAccountArray = inputData.stringVSAccount.split(',');
  listVSUnitsArray = inputData.stringVSUnits.split(',');
  listVSPriceArray = inputData.stringVSPrice.split(',');
  listVSNotesArray = inputData.stringVSNotes.split(',');
  listVSVisitCallArray = inputData.stringVSVisitCall.split(',');
}

// iterate over the array using forEach()
listVSAccountArray.forEach(function(elem, index){
  // elem is listVSAccountArray[index]
  output.push({
    itemVSAccount: elem,
    itemVSUnits: listVSUnitsArray[index],
    itemVSPrice: listVSPriceArray[index],
    itemVSNotes: listVSNotesArray[index],
    itemVSVisitCall: listVSVisitCallArray[index]
  })
})

//This is where the second zaps code is pasted in the combined version
var listOVAccountArray = [],
    listOVNotesArray = [],
    listOVVisitCallArray = [],
    output_two = []; // changed the name of the second output array

if (typeof inputData.stringOVAccount === 'string') {
  listOVAccountArray = inputData.stringOVAccount.split(',');
  listOVNotesArray = inputData.stringOVNotes.split(',');
  listOVVisitCallArray = inputData.stringOVVisitCall.split(',');
}

// iterate over the array using forEach()
listOVAccountArray.forEach(function(elem, index){
  // elem is listOVAccountArray[index]
  output_two.push({
    itemOVAccount: elem,
    itemOVNotes: listOVNotesArray[index],
    itemOVVisitCall: listOVVisitCallArray[index]
  });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50567749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档