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

Javascript 当使用嵌套的forEach循环而没有临时变量时,如何从main函数返回值?,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我想返回primaryNumber,而不必使用额外的变量 我想要一个arrow语句函数,它只返回element.number,而不需要primaryNumber。由于内部forEach位于不同的范围内,因此我不能从findPrimaryNumber()返回element.number。有好的解决办法吗 function findPrimaryNumber(gender, naturalExpressionYearOfBirth) { let primaryNumber, primaryN

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

我想要一个arrow语句函数,它只返回
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,
    ]
  }
];

您可以使用
。查找

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
}

您可以使用
。查找

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
}

用于循环
,您的函数将变得更加简单易读,因为您将能够从内部循环返回:

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;
      }
    }
  }
}

用于循环
,您的函数将变得更加简单易读,因为您将能够从内部循环返回:

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;
      }
    }
  }
}
您可以使用查找:

   primaryNumberGenderObject.find(element => {
      return element.year.includes(naturalExpressionYearOfBirth)
   }).number;
这将找到回调返回值
true

的第一个元素,您可以使用find:

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

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

是的,使用for-loop.Well只是不使用
forEach
。是的,使用for-loop.Well只是不使用
forEach
。我建议
一些
甚至只是
包含
而不是内部
find
是的,我想这会更具可读性,但就复杂性而言,它是一样的。让我把这个也加到答案上。这很有趣!我想知道如何使用find。你能解释一下结尾的
|{}.number
是什么吗?@Sumomo如果没有找到任何内容,你就不想访问
.number
上的
.undefined
,以防万一没有匹配项。“查找”将返回一个未定义的
。为了避免错误返回到空对象。我建议使用
some
,甚至只使用
includes
,而不是内部的
find
。是的,我想这会更具可读性,但就复杂性而言,它是一样的。让我把这个也加到答案上。这很有趣!我想知道如何使用find。你能解释一下结尾的
|{}.number
是什么吗?@Sumomo如果没有找到任何内容,你就不想访问
.number
上的
.undefined
,以防万一没有匹配项。“查找”将返回一个未定义的
。从返回到空对象的错误中保存。