Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.5k views
in Technique[技术] by (71.8m points)

foreach return object property javascript

In the following code, can somebody explain why object property is returned using a for loop but not using a forEach. Is it something related to returning object references or is it something specific to forEach loop on an array ?

var empModule = (function(){
    var empArray = [{
        "name":"Aish",
        "age":"27",
        "location": "All"
    },{
        "name":"Anu",
        "age":"26",
        "location": "Muz"
    },{
        "name":"Vern",
        "age":"25",
        "location": "Mang"
    }];

    var searchAge = function(name){  
        for(var i=0;i<empArray.length;i++) {
            if(empArray[i].name === name) {
                return empArray[i].age;
            }
        };
    };

    var searchLocation = function(name){
        empArray.forEach(function(obj){
            if(name === obj.name) {
                return obj.location;
            }
        });
    };

    return {
        findAge: searchAge,
        findLocation: searchLocation
    };

})();
var secAge = empModule.findAge("Anu");
console.log(secAge); // Correct Output
var thirdLoc = empModule.findLocation("Vern");
console.log(thirdLoc); // Returns undefined
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

return returns to the function it's in. In the for.. example, that's searchAge. When you use forEach(), you pass it a callback function, and so you return the value to that callback. You never return anything in searchLocation.

You should just use the regular for.. loop both times here.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...