Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.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 获取第一个函数调用匹配的返回值,而不调用它两次_Javascript - Fatal编程技术网

Javascript 获取第一个函数调用匹配的返回值,而不调用它两次

Javascript 获取第一个函数调用匹配的返回值,而不调用它两次,javascript,Javascript,我有一个函数引用数组 我需要找到满足匹配条件的第一个函数调用的返回值 如何避免调用匹配的函数两次 var f = function(x) { if (x === 10) return "ten"; } var g = function(y) { if (y === 20) return "twenty"; } var result = [f, g].find(m => m(10)) if (result) return result(10) // this returns "ten"

我有一个函数引用数组

我需要找到满足匹配条件的第一个函数调用的返回值

如何避免调用匹配的函数两次

var f = function(x) { if (x === 10) return "ten"; }
var g = function(y) { if (y === 20) return "twenty"; }

var result = [f, g].find(m => m(10))
if (result) return result(10)
// this returns "ten"

你能使用全局变量吗

var f=函数(x){
返回x%2==0
}
var g=函数(y){
返回x%2==1
}
var result=[f,g].find(函数(m){
window.blah=m(10);
返回窗口。诸如此类;
})

console.log(window.blah)您可以在运行时存储在变量中。这比使用全局搜索引擎要好

varf=function(x){if(x==10)返回“十”;};
VARG=函数(y){如果(y==20)返回“二十”;};
函数findValue(funcs,val){
var结果;
funcs.find(m=>result=m(val));
返回结果;
}

log(findValue([f,g],10))仍然不确定我是否完全理解您的问题。在我看来,如果使用条件调用的函数是truthy,那么您希望遍历函数数组并返回结果

let fncaller = (fns, condition) => {
  var result
  for (var fn of fns) {
    result = fn(condition)
    if (result) { return result }
  }
}

你能提供一些背景吗?10美元是多少?数组在哪里?@4castle数组是函数引用的数组。
10
是一个数字。所以您试图找到m(10)返回true的函数吗?@IMTheNachoMan不,他试图得到满足条件的函数的函数调用结果。@4castle-weight。这个问题是相当独立的;只有标题是次优的。这与
10
的用途无关,它是传递给数组中函数的参数,OP调用的函数数组与这些函数的返回值相匹配。似乎提前返回的标准迭代将是最有效的。是的。我会假设类似的效果,因为两者基本上都在数组中循环。对性能没有把握。无法检查。
find
将迭代所有函数;使用具有早期返回的简单迭代不会。对于快速函数或短列表来说并不重要,但是对于长时间运行的函数来说,这很重要。哦?我以为
Array.find
首先会停止
true
@DaveNewton:
[1,2,3,4,5,6,7,8910].find(函数(x){console.log(x);return x==4;})
会在4停止,不会检查其他函数……不过不需要重新发明轮子。看我的答案,那是。。。全局。@Dave OP使用的是return语句,所以它实际上是函数作用域。@Dave OP不打算将这些语句放在全局作用域中。这只是他们函数中应该包含的内容的一个片段。@Dave好的,我尽可能清楚地给出了答案。它不是全球性的。不,现在不是了。