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-编辑以仅返回第一个索引(如果存在)。