从循环中返回值的最有效方法是什么?

时间:2016-11-18 22:10:11

标签: javascript jquery

从循环中返回值的最有效方法是什么?以下示例中的FlowId表示区域名称的串联,后跟" Flow"。例如," NortheastSoutheastFlow"," TexasSoutheastFlow"等regionNames表示存储为全局变量的区域名称数组,如[' Northeast','东南亚''德州'。 regionName函数param表示已知的区域名称,函数的目标是返回流中包含的其他区域名称:

function getOtherFlowRegionName(flowId, regionName)
{
    regionNames.forEach(function(otherRegionName)
    {
        if(flowId.indexOf(otherRegionName) > -1)
        return otherRegionName;
    }
}

解决方案可以是jquery或vanilla js。

2 个答案:

答案 0 :(得分:0)

以下是4个选项,您可以使用这些选项从循环中返回值,就像您所描述的那样。

编辑 - 重新阅读问题后,我意识到您正在寻找与该区域或“流量”不匹配的flowId部分。这是你在找什么?

更新 - 重新阅读您的问题后,我现在理解您要传递regionName,而不是匹配regionNames中的第一个阵列。

function getOtherFlowRegionName(flowId, regionName) {
  var otherRegionName = "";
  flowId = flowId.replace(regionName, "");
  // option 1 (iterates over all elements in regionNames)
  regionNames.forEach(function(region) {
    if (flowId.indexOf(region) > -1) {
      otherRegionName = region;
    }
  });
  // option 2 (stops when it reaches the first true value)
  regionNames.some(function(region) {
    if (flowId.indexOf(region) > -1) {
      otherRegionName = region;
      return true;
    }
  });
  // option 3 (iterates over all elements in regionNames)
  otherRegionName = regionNames.reduce(function(name, region) {
    return flowId.indexOf(region) > -1 ? region : name;
  }, "");
  // option 4 (stops when it reaches the first true value)
  for (var i = 0; i < regionNames.length; i++) {
    var region = regionNames[i];
    if (flowId.indexOf(region) > -1) {
      otherRegionName = region;
      break;
    }
  }
  return otherRegionName;
}
var flow1 = "NortheastSoutheastFlow";
var flow2 = "TexasSoutheastFlow";
var flow3 = "TexasNortheastFlow";
var regionNames = ['Northeast', 'Southeast', 'Texas'];

console.log(getOtherFlowRegionName(flow1, "Northeast"));
console.log(getOtherFlowRegionName(flow1, "Southeast"));
console.log(getOtherFlowRegionName(flow2, "Texas"));
console.log(getOtherFlowRegionName(flow2, "Southeast"));
console.log(getOtherFlowRegionName(flow3, "Texas"));
console.log(getOtherFlowRegionName(flow3, "Northeast"));

在我看来,正确的解决方案是使用简单的for loop,你可以这样简化:

function getOtherFlowRegionName(flowId, regionName) {
  flowId = flowId.replace(regionName, "");
  for (var i = 0; i < regionNames.length; i++) {
    if (flowId.indexOf(regionNames[i]) > -1) {
      return regionNames[i];
    }
  }
}

答案 1 :(得分:0)

上学。最有目的,简洁,直接和高效:

function getOtherFlowRegionName(flowId, regionName)
{
    for(var i=0; i<regionNames.length; i++)
        if(flowId.indexOf(regionNames[i]) > -1) 
            return regionNames[i];
}