![](/img/trans.png)
[英]How can i break a for in loop from nested forEach Function in Javascript?
[英]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.