从循环中返回值的最有效方法是什么?以下示例中的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。
答案 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];
}