Javascript 在.map()中返回布尔值的行为与在for()循环中的行为不同?
返回布尔值时使用Javascript 在.map()中返回布尔值的行为与在for()循环中的行为不同?,javascript,Javascript,返回布尔值时使用.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*
.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 (?)
函数simpleLoop(数组){
//工作如期进行
对于(var i=theArray.length-1;i>=0;i--){
设值=一个对象[theArray[i]];
如果(!value | |/^\s*$/.test(value)){
返回true;
}
}
}
函数simpleMap(数组){
//不起作用
theArray.map((语言)=>{
常量值=对象[语言];
如果(!value | |/^\s*$/.test(value)){
返回true;
}
});
}
simpleLoop(theArray)/map
函数不修改数组。它是不可变的操作。映射函数变换数组并返回一个新数组。在您的情况下,您不会返回修改后的数组。您需要在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 ;
}
map
函数不修改数组。它是不可变的操作。映射函数变换数组并返回一个新数组。在您的情况下,您不会返回修改后的数组。您需要在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 ;
}
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;
}
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;
}
当您在for
循环中返回时,您是从simpleLoop
函数返回的。当您在map
内返回时,您将从map
的匿名函数返回。
我会使用some
而不是map
来获得想要的效果:
function simpleSome(theArray) {
return theArray.some((language) => {
const value = anObject[language];
return !value || /^\s*$/.test(value);
});
}
当您在for
循环中返回时,您是从simpleLoop
函数返回的。当您在map
内返回时,您将从map
的匿名函数返回。
我会使用some
而不是map
来获得想要的效果:
function simpleSome(theArray) {
return theArray.some((language) => {
const value = anObject[language];
return !value || /^\s*$/.test(value);
});
}
return
在回调函数中,simpleMap
没有return
语句。当return
在for
循环中时,您是从simpleLoop
函数返回的。当您在map
内返回时,您将从匿名函数返回。@Thole那么您将如何使simpleMap返回它呢?或者这是不可能的?map()exists@NealVDV我将使用some
而不是map
,并从simpleMap
返回该值。return
位于回调函数中,simpleMap
没有return
语句。当return
在for
循环中时,您是从simpleLoop
函数返回的。当您在map
内返回时,您将从匿名函数返回。@Thole那么您将如何使simpleMap返回它呢?或者这是不可能的?map()exists@NealVDV我会使用some
而不是map
,并从simpleMap
返回它。是的,现在我知道它只是用修改后的值创建一个新数组, thanks@NealVDV不……它根本没有像@charlietfl^所说的那样修改原始数组。它实际上是在创建一个新数组,但该数组没有被使用,因为它没有被分配给任何对象或从函数返回。是的,现在我知道它只是在创建一个带有修改值的新数组,thanks@NealVDV不……它根本没有像@charlietfl^所说的那样修改原始数组。它实际上是在创建一个新数组,但该数组没有被使用,因为它没有被分配给任何对象或从函数返回。将在数组中的其他元素上返回undefined。我相当怀疑OP正试图做到这一点accomplish@charlietfl您是对的,这就是原因,我将注释添加到`//返回数组或您的条件。`以确保OP可以基于所需的条件返回。将在数组中的其他元素上返回未定义。我相当怀疑OP正试图做到这一点accomplish@charlietfl您是对的,这就是原因,我将注释添加到`//Return array或your condition.`中,以确保OP可以根据需要的条件返回。