在foreach中返回值

时间:2016-05-27 23:59:09

标签: javascript foreach return

所以这很奇怪,我有这样的foreach函数:

  let cookieValue = '';

  cookieList.forEach(function(cookieItem) {
    const cookieParts = cookieItem.split('=');
    const value = cookieParts[1];
    const key = cookieParts[0];
    if (key.trim() === cookieName) {
      cookieValue = value;
      return cookieValue;
    }
  });

  return cookieValue;

工作正常,但是当我将if语句中的行更改为单行时:

return value;

它总是返回undefined。

关于这里可能发生什么的任何想法?

3 个答案:

答案 0 :(得分:2)

忽略forEach的返回,但您可以使用map和filter:

function getCookieValue(cookieList, cookieName) {
    var val = cookieList.map(function(cookieItem) {
        var cookieParts = cookieItem.split('=');
        var value = cookieParts[1];
        var key = cookieParts[0];
        return (key.trim() === cookieName) ? value : null;
    })
    .filter((value) => { return value != null })[0];
    return val;
}

let cookieValue = getCookieValue(["key1=val1", "key2=val2"], "key2"); // > "val2"

答案 1 :(得分:0)

您的代码有效"罚款"首先是因为您手动更改了cookieValue的值。

Array.prototype.map对您传递给它的回调的返回值没有做任何事情。

在这种情况下,我会使用Array.prototype.reduce和{{3}}的组合:

let cookieValue = cookieList.map(function(cookieItem) {
  const cookieParts = cookieItem.split('=');
  const value = cookieParts[1];
  const key = cookieParts[0];
  if (key.trim() !== cookieName) {
    return null;
  }
  return value;
}).reduce(function(a, b) {
  return a || b;
}, '');

return cookieValue;

答案 2 :(得分:0)

forEach函数中的返回值将返回该函数。通过将返回值放在外部函数中,可以在调用该函数时返回该值。请参阅此简化示例。

function x(){
    function y(){
        return 5 // Does not return in the x function
    }
    y() // = 5
    return 7
}
x() // =7

您似乎在寻找Array.find。

let cookieValue = '';
return cookieList.find(function(cookieItem) {
  const cookieParts = cookieItem.split('=');
  const value = cookieParts[1];
  const key = cookieParts[0];
  return key.trim() === cookieName
});