繁体   English   中英

使用嵌套的forEach循环而没有临时变量时,如何从主函数返回值?

[英]How can I return a value from the main function when using a nested forEach loop without a temporary variable?

我想返回primaryNumber而不必使用额外的变量。

我想要一个箭头声明函数,该函数只返回element.number而不需要primaryNumber 就目前而言,内部forEach处于不同的范围内,所以我不能仅从findPrimaryNumber()返回element.number 有没有好的解决方案?

function findPrimaryNumber(gender, naturalExpressionYearOfBirth) {
    let primaryNumber, primaryNumberGenderObject;
    if (gender === "f") {
        primaryNumberGenderObject = primaryNumberFemales;
    } else if (gender === "m") {
        primaryNumberGenderObject = primaryNumberMales;
    }

    primaryNumberGenderObject.forEach(element => {
        element.year.forEach(yearWeAreLookingFor => {
            if (yearWeAreLookingFor === naturalExpressionYearOfBirth) {
                primaryNumber = element.number;
            }
        });
    });
    return primaryNumber;
}

这是它正在搜索的对象的示例:

const primaryNumberMales = [{
    name: "Fire Yin",
    number: 9,
    year: [1910,
      1919,
      1928,
      1937,
      1946,
      1955,
      1964,
      1973,
      1982,
      1991,
      2000,
      2009,
      2018
    ]
  },
  {
    name: "Mountain Yang",
    number: 8,
    year: [1911,
      1920,
      1929,
      1938,
      1947,
      1956,
      1965,
      1974,
      1983,
      1992,
      2001,
      2010,
      2019,
    ]
  },
  {
    name: "Lake Yin",
    number: 7,
    year: [1912,
      1921,
      1930,
      1939,
      1948,
      1957,
      1966,
      1975,
      1984,
      1993,
      2002,
      2011,
      2020,
    ]
  },
  {
    name: "Sky Yang",
    number: 6,
    year: [1913,
      1922,
      1931,
      1940,
      1949,
      1958,
      1967,
      1976,
      1985,
      1994,
      2003,
      2012,
      2021,
    ]
  },
  {
    name: "Earth Core Yang",
    number: 5,
    year: [1914,
      1923,
      1932,
      1941,
      1950,
      1959,
      1968,
      1977,
      1986,
      1995,
      2004,
      2013,
      2022,
    ]
  },
  {
    name: "Wind Yin",
    number: 4,
    year: [1915,
      1924,
      1933,
      1942,
      1951,
      1960,
      1969,
      1978,
      1987,
      1996,
      2005,
      2014,
      2023,
    ]
  },
  {
    name: "Thunder Yang",
    number: 3,
    year: [1916,
      1925,
      1934,
      1943,
      1952,
      1961,
      1970,
      1979,
      1988,
      1997,
      2006,
      2015,
      2024,
    ]
  },
  {
    name: "Earth Yin",
    number: 2,
    year: [1917,
      1926,
      1935,
      1944,
      1953,
      1962,
      1971,
      1980,
      1989,
      1998,
      2007,
      2016,
      2025,
    ]
  },
  {
    name: "Sea Yang",
    number: 1,
    year: [1918,
      1927,
      1936,
      1945,
      1954,
      1963,
      1972,
      1981,
      1990,
      1999,
      2008,
      2017,
      2026,
    ]
  }
];

您可以使用find:

   primaryNumberGenderObject.find(element => {
      return element.year.includes(naturalExpressionYearOfBirth)
   }).number;

这将找到回调返回true的第一个元素。

您可以使用.find尝试

function findPrimaryNumber(gender, naturalExpressionYearOfBirth) {
    let primaryNumberGenderObject;

    if (gender === "f") {
      primaryNumberGenderObject = primaryNumberFemales;
    } else if (gender === "m") {
      primaryNumberGenderObject = primaryNumberMales;
    }

    return (primaryNumberGenderObject.find(element =>
      element.year.includes(naturalExpressionYearOfBirth)          
    ) || {}).number

    // OR AN INNER FIND, NOT SO ADVISABLE
    // return (primaryNumberGenderObject.find(element =>
    //   element.year.find(yearWeAreLookingFor => 
    //     yearWeAreLookingFor === naturalExpressionYearOfBirth
    //   )
    // ) || {}).number
}

使用for-loop ,您的函数将变得更简单易读,因为您将能够从内部循环中返回:

function findPrimaryNumber(gender, naturalExpressionYearOfBirth) {
  let primaryNumber, primaryNumberGenderObject;

  if (gender === "f") {
    primaryNumberGenderObject = primaryNumberFemales;
  } else if (gender === "m") {
    primaryNumberGenderObject = primaryNumberMales;
  }

  for (let element of primaryNumberGenderObject) {
    for (let yearWeAreLookingFor of element.year) {
      if (yearWeAreLookingFor === naturalExpressionYearOfBirth) {
        return element.number;
      }
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM