Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在Javascript中优化两个for循环?_Javascript_Recursion_Dry_Suitescript2.0 - Fatal编程技术网

有没有办法在Javascript中优化两个for循环?

有没有办法在Javascript中优化两个for循环?,javascript,recursion,dry,suitescript2.0,Javascript,Recursion,Dry,Suitescript2.0,当满足某些条件时,我需要通过客户端脚本显示警报()。但我无法打印记录编号,这将是用户的关键信息,即这些特定记录导致系统显示警报。 我做了一个for循环,在这个循环中,我在名为docNoArr的数组中推送docNo(记录ID)的值。 然后在另一个for循环中,我用我在docNoArr数组中推送的值触发警报。 有谁能给我建议一个更好的方法来优化代码,因为它是重复的。我的老师对我说:不要重复你自己。但在这里,我被困在如何不重复 我的代码: var docNoArr = []; /* 1st For

当满足某些条件时,我需要通过客户端脚本显示
警报()。但我无法打印记录编号,这将是用户的关键信息,即这些特定记录导致系统显示警报。
我做了一个for循环,在这个循环中,我在名为
docNoArr
的数组中推送
docNo
(记录ID)的值。 然后在另一个for循环中,我用我在
docNoArr
数组中推送的值触发警报。 有谁能给我建议一个更好的方法来优化代码,因为它是重复的。我的老师对我说:不要重复你自己。但在这里,我被困在如何不重复

我的代码:

var docNoArr = [];

/* 1st For Loop */

for (var e = 0; e < count; e++) {
  isApplied = rec.getSublistValue({
    sublistId: subid,
    fieldId: reqid,
    line: e
  });
  if (isApplied == true) {
    rectype = rec.getSublistValue({
      sublistId: subid,
      fieldId: 'custpage_am_rectype',
      line: e
    });
    if (rectype == 'qcs') {
      var supplierFld = rec.getValue({ fieldId: 'custpage_am_vendor' });
      var docNoFld = rec.getSublistValue({
        sublistId: subid,
        fieldId: 'custpage_am_docnum',
        line: e
      });
      var recomdSupplier = rec.getSublistValue({
        sublistId: subid,
        fieldId: 'custpage_am_supplier',
        line: e
      })
      if (recomdSupplier != supplierFld) {
        docNoArr.push(docNoFld);
      }
    }
  }
}

/* 2nd For Loop */

for (var ee = 0; ee < count; ee++) {
  isApplied1 = rec.getSublistValue({
    sublistId: subid,
    fieldId: reqid,
    line: ee
  });
  if (isApplied1 == true) {
    rectype1 = rec.getSublistValue({
      sublistId: subid,
      fieldId: 'custpage_am_rectype',
      line: ee
    });
    if (rectype1 == 'qcs') {
      var supplierFld1 = rec.getValue({ fieldId: 'custpage_am_vendor' });
      var recomdSupplier1 = rec.getSublistValue({
        sublistId: subid,
        fieldId: 'custpage_am_supplier',
        line: ee
      });
      if (recomdSupplier1 != supplierFld1) {
        alert('Vendor selected in not recommended in ' + docNoArr + ' \nPlease enter Correct Vendor!');
        return false;
      }
    }
  }
}
var docNoArr=[];
/*第一个For循环*/
对于(var e=0;e
我不完全确定代码的作用,但看起来您创建一个新数组只是为了获取警报的索引

你不能

if (recomdSupplier != supplierFld) {
  docNoArr.push(docNoFld);
  alert('Vendor selected in not recommended in ' + docNoArr.length - 1 + ' \nPlease enter Correct Vendor!');
}

您是否可以将记录存储在格式化字符串中,而不是将它们放入数组中,因为它们已经从另一个循环中进行了限定

此外,由于这个问题涉及性能,您可能希望使用时间戳来查看哪个循环实际运行得更快,
forEach
vs
for(var e=0;e


实际上,我在第一个for循环中推送docNoArr数组中的一个字段值,而不是在第二个for循环中,我只是用我在上一个for循环中推送的那些值显示一个警报。我希望我是清楚的。您的计数是指“rec”中的行数吗?您似乎在尝试查看子列表行上的供应商是否与记录标题上的供应商?是的,这正是我想要实现的
                    console.time('for each');
                     data['results'].forEach(element => {
                        //do something
                     });
                     console.timeEnd('for each');
/* 1st for loop  here*/

if (docNoArr.length > 0) {
    alert('Vendor selected is not recommended in ' + docNoArr.join(', ') + '.\nPlease enter Correct Vendor!');
}

/* 2nd for loop not needed */