2017-01-30 18 views
0

返回布尔值时,在使用.map()for()时是否有区别?请参阅代码示例,其中for()循环返回true,但.map()不返回任何内容。返回.map()中的布尔值与for()循环中的行为不同?

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 (?) 
+6

那'return'是在回调函数,'simpleMap'没有'return'声明。 – Bergi

+0

当您在'for'循环中返回时,您将从'simpleLoop'函数返回。当你在'map'内返回时,你从匿名函数返回。 – Tholle

+0

@Tholle,你会如何让simpleMap返回呢?或者这是不可能的? – NealVDV

回答

3

当您在for循环内返回时,您将从simpleLoop函数返回。当您返回map时,您将从给出的匿名函数返回map。 我会用some而不是map以获得所需的效果:

function simpleSome(theArray) { 
    return theArray.some((language) => { 
     const value = anObject[language]; 
     return !value || /^\s*$/.test(value); 
    }); 
} 
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 ; 
} 
+1

将在数组中的其他元素上返回undefined。而是怀疑OP是在试图完成什么 – charlietfl

+0

@charlietfl你是对的,这就是为什么,我将注释添加到'//返回数组或条件.'以确保OP可以根据所需条件返回。 – Agalo

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

是的,现在我明白,它只是创建一个新的数组与修改后的值,谢谢 – NealVDV

+0

@NealVDV没有...它根本不修改原始数组 – charlietfl

+1

什么@charlietfl ^说。它实际上是在创建一个新的数组 - 但是数组并没有被使用,因为它没有被分配给任何东西或者从函数返回。 – jeffdill2