在.map()中返回布尔值与for()循环中的行为不同?

时间:2017-01-30 16:19:08

标签: 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*$/.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 (?)

3 个答案:

答案 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 ;
}