foreach返回对象属性javascript

时间:2015-04-08 07:59:25

标签: javascript

在下面的代码中,有人可以解释为什么使用for循环返回object属性但不使用forEach。 它是与返回对象引用相关的东西还是特定于数组上的forEach循环的东西?

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

4 个答案:

答案 0 :(得分:2)

return返回其所在的函数。在for..示例中,searchAge。当您使用forEach()时,您将传递回调函数,因此您将值返回到该回调。你永远不会在searchLocation中返回任何内容。

你应该在这里两次使用常规的for..循环。

答案 1 :(得分:2)

在java脚本中没有forEach的中断方法。

如果您使用

return obj.location

它对它没有影响

但是当你在for循环中使用return方法时,它会中断并返回值。

someevery有一个中断方法。

Some休息return trueevery休息return false;

试试这个

var location = "";
empArray.some(function (obj) {
    if (name === obj.name) {
        location = obj.location;
        return true;
    }
});
return location;

或尝试这样

var location = "";
empArray.every(function (obj) {
    if (name === obj.name) {
        location = obj.location;
        return false;
    }
});.
return location;

答案 2 :(得分:1)

那是因为在下面的代码片段中

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

如果你想做同样的事情,请使用filter,如下文

var searchLocation = function(name){
   return empArray.filter(function(obj) {
      return name === obj.name
   })[0].location;
};

return语句将作为anonymous function的参数提供给foreach函数,而不是searchLocation函数。

答案 3 :(得分:0)

来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

  

forEach()为每个数组元素执行一次回调函数;   与every()和some()不同,它总是返回undefined值。

所以你可以尝试这个设置变量并在循环之后返回它:

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