2013-04-17 119 views
0

我在从函数返回Object时遇到了概念上的Javascript问题。有人能指出我在这里做错了什么吗?如何从函数返回对象?

var productsPartsObj = { 
    layers: ['toe', 'base', 'shaft'], 
    layer: [ 
    { 
     name: 'toe', 
     height: 75, 
     width: 78, 
     coords: { 
     x: 20, 
     y: 120 
     } 
    } 
    ] 
} 

var coords = {}; 
coords = (function() { 
    productsPartsObj.layer.forEach(function(layerObj){ 
    if (layerObj.name === "toe") { 
     return layerObj.coords; 
    } 
    }) 
})() 

console.log(coords); //logs undefined 

回答

6

您从forEach回调返回,而不是从立即执行的函数表达式。你可以这样做,而不是(假设你知道有只会永远是layer阵列与name匹配有问题的价值的一个要素:

var coords = (function() { 
    return productsPartsObj.layer.filter(function(layerObj){ 
     return layerObj.name === "toe"; 
    })[0].coords; 
})(); 

注意到有2个return报表 - 从第一个返回IIFE,并从filter回调的第二个返回。

还要注意,我搬到了var关键字到这个声明,没有点分配一个空的对象coords,然后简单地覆盖它。

+0

,使所有的感觉现在COORDS值!谢谢! –

+0

@AakashGoel - 不客气,很高兴我可以帮助:) –

0

您的匿名函数没有返回任何值。

var productsPartsObj = { 
    layers : ['toe', 'base', 'shaft'], 
    layer : [{ 
       name : 'toe', 
       height : 75, 
       width : 78, 
       coords : { 
        x : 20, 
        y : 120 
       } 
      }] 
} 

var coords = {}; 
coords = (function() { 
    var x; 
    productsPartsObj.layer.forEach(function(layerObj) { 
       if (layerObj.name === "toe") { 
        x = layerObj.coords; 
       } 
      }) 
    return x; 
})() 

console.log(coords); 

,否则设置直接使用

var coords = {}; 
(function() { 
    productsPartsObj.layer.forEach(function(layerObj) { 
       if (layerObj.name === "toe") { 
        coords = layerObj.coords; 
       } 
      }) 
})()