Javascript 从外部向函数返回值

Javascript 从外部向函数返回值,javascript,Javascript,我正在比较两个信息,然后试图得到正确的对象。 但是我不能将输出返回到函数本身 channelUserRight: function(channel, nickname){ userlist.forEach(function(chaninfo) { if(chaninfo.channel === channel && chaninfo.name === nickname){ // Whenever I

我正在比较两个信息,然后试图得到正确的对象。 但是我不能将输出返回到函数本身

    channelUserRight: function(channel, nickname){

        userlist.forEach(function(chaninfo) {
            if(chaninfo.channel === channel && chaninfo.name === nickname){
                // Whenever I do console.log it shows me output
                console.log(chaninfo);
                return chaninfo;
            }           
        }); 

    }
// Here it shows me 'undefined'
console.log(channelUserRight(channel, user))
channelUserRight(channel, user)

因此,在函数内部我得到了正确的对象,而不是函数外部。

您只需返回
forEach
函数的回调,如果改用filter,您可以返回过滤后的数组,或者直接返回第一个索引

channelUserRight: function(channel, nickname){
    var list = userlist.filter(function(chaninfo) {
        return chaninfo.channel === channel && chaninfo.name === nickname;
    });

    return list.length ? list.shift() : null;
}

您只需返回到
forEach
函数的回调,如果改用filter,则可以返回过滤后的数组,或者直接返回第一个索引

channelUserRight: function(channel, nickname){
    var list = userlist.filter(function(chaninfo) {
        return chaninfo.channel === channel && chaninfo.name === nickname;
    });

    return list.length ? list.shift() : null;
}

在这种情况下,您需要在函数级别设置一个变量,并使用该变量返回您的值:

function(channel, nickname){
  var _chaninfo;

  userlist.forEach(function(chaninfo) {
     if(chaninfo.channel === channel && chaninfo.name === nickname) {
        _chaninfo = chaninfo;
     }
  }); 

  return _chaninfo;
}

问题是
return
从用于迭代的函数块返回@adeneo使用
过滤器的方法实际上更干净,因此我建议使用该方法,但这是解决您眼前问题的“解决方案”。

在这种情况下,您需要在函数级别设置一个变量,并使用该变量返回值:

function(channel, nickname){
  var _chaninfo;

  userlist.forEach(function(chaninfo) {
     if(chaninfo.channel === channel && chaninfo.name === nickname) {
        _chaninfo = chaninfo;
     }
  }); 

  return _chaninfo;
}

问题是
return
从用于迭代的函数块返回@adeneo使用
过滤器的方法实际上更干净,所以我建议使用它,但这是对您当前问题的“修复”。

您的
channelUserRight
没有返回任何内容。您的
return
语句位于
forEach
回调中。那没什么用。对每个元素运行
forEach
回调,并且忽略任何返回值。您的
channelUserRight
没有返回任何内容。您的
return
语句位于
forEach
回调中。那没什么用。
forEach
回调针对每个元素运行,任何返回值都被忽略。感谢调用
.filter()
。我如何将其直接作为[0]索引返回,否则我需要编辑许多代码?@J.Doe-编辑为仅返回第一个索引(如果存在)。感谢调用
.filter()
调用。我如何将其直接作为[0]索引返回索引:否则我需要编辑多个代码?@J.Doe-编辑以仅返回第一个索引(如果存在)。