如何在JavaScript中返回forEach循环中的值

时间:2016-06-08 08:55:53

标签: javascript

我的代码卡住了。

我编写此示例代码只是为了重现我的问题,所以这段代码根本不实用,但我希望你明白我的观点。

在下面的代码中,对于要输出的最后一个值,我希望它是3,但它未定义。

如果我想在这种情况下将最后一个值设为3,我该怎么写?

这只是一个示例代码,但在实际代码中,我从amazon api获取内容,当它返回api错误时,我想在1000毫秒后再次运行相同的函数。

var list = [1,2,3];
var someClass = new SomeClass();

list.forEach(function(value) {

    var result = someClass.getSomething(value);

    console.log("outside: " + result);  

});


function SomeClass() {

    var flag = false;

    this.getSomething = function(something) {

        if (something === 3 && flag === false) {

            flag = true;
            this.getSomething(something);

            //I need to return here, so the succeeding code is not read.
            return;

        }

        console.log("inside: " + String(something));

        return something;

    }

}

日志

inside: 1
outside: 1
inside: 2
outside: 2
inside: 3
outside: undefined // I expect this value to be 3!!!

5 个答案:

答案 0 :(得分:4)

你有一个测试:

   if (something === 3 && flag === false) {
       //...
       return;

如果您想要返回3,则不要在其后面没有任何内容的return语句。 return表示return undefined。放return 3return something

您可能希望从递归通话中返回:

return this.getSomething(something);

答案 1 :(得分:1)

问题在于:

function SomeClass() {

    var flag = false;

    this.getSomething = function(something) {

        if (something === 3 && flag === false) {

            flag = true;

            this.getSomething(something); // not returning this

            return; // returning undefined

        }

        console.log("inside: " + String(something));

        return something;

    }

}

以下是修复:

function SomeClass() {

    var flag = false;

    this.getSomething = function(something) {

        if (something === 3 && flag === false) {

            flag = true;

            return this.getSomething(something);

        }

        console.log("inside: " + String(something));

        return something;

    }

}

答案 2 :(得分:0)

将代码更改为

if(某事=== 3&& flag === false)  {

       flag = true;
        return this.getSomething(something);

}

“返回”;返回undefined

答案 3 :(得分:0)

它会在您的代码中返回undefined,因为您在return;子句中if

return this.getSomething(something)子句

中的

if

var list = [1, 2, 3];
var someClass = new SomeClass();

list.forEach(function(value) {

    var result = someClass.getSomething(value);

    console.log("outside: " + result);

});


function SomeClass() {

    var flag = false;

    this.getSomething = function(something) {

        if (something === 3 && flag === false) {

            flag = true;
            return this.getSomething(something);

        }

        console.log("inside: " + String(something));

        return something;

    }

}

答案 4 :(得分:-1)

forEach循环不返回值。 您可以创建一个全局变量并为其赋值。