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
,以防万一没有匹配项。“查找”将返回一个未定义的
。从返回到空对象的错误中保存。