返回布尔值时使用.map()
和for()
会有区别吗?请参阅代码示例,其中for()
循环返回true,但.map()
不返回任何内容。
function simpleLoop(theArray) {
// Works as expected
for (var i = theArray.length - 1; i >= 0; i--) {
let value = anObject[theArray[i]];
if (!value || /^\s*$/.test(value)) {
return true;
}
}
}
function simpleMap(theArray) {
// Does not work
theArray.map((language) => {
const value = anObject[language];
if (!value || /^\s*$/.test(value)) {
return true;
}
});
}
simpleLoop(theArray) // <-- returns true
simpleMap(theArray) // <-- returns nothing (?)
答案 0 :(得分:3)
当您在for
循环内返回时,您将从simpleLoop
函数返回。当您在map
内返回时,您将从给予map
的匿名函数返回。
我会使用some
代替map
来获得所需的效果:
function simpleSome(theArray) {
return theArray.some((language) => {
const value = anObject[language];
return !value || /^\s*$/.test(value);
});
}
答案 1 :(得分:1)
simpleMap
没有返回任何内容 - 它只是创建一个数组。
尽管@ Thoelle的回答是我推荐的最干净的解决方案,但为了耗尽所有选项,这里有一种可以使用map()
完成你想要的工作的方式功能:
function simpleMap(theArray) {
const localArray = theArray.map((language) => {
const value = anObject[language];
if (!value || /^\s*$/.test(value)) {
return true;
}
});
return localArray.indexOf(true) > -1;
}
答案 2 :(得分:0)
map
函数不修改数组。它是不可变的操作。 Map函数转换数组并返回一个新的Array。在您的情况下,您没有返回已修改的数组。您需要在map
回调函数之外返回测试条件。
function simpleMap(theArray) {
// Does not work
var newArray = theArray.map((language) => {
const value = anObject[language];
if (!value || /^\s*$/.test(value)) {
return true;
}
});
// Return array or your condition.
return newArray ;
}