如何从函数返回对象?

时间:2013-04-17 06:42:16

标签: javascript

从函数返回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

2 个答案:

答案 0 :(得分: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,然后简单地覆盖它。

答案 1 :(得分: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);

否则使用

直接设置coords值
var coords = {};
(function() {
    productsPartsObj.layer.forEach(function(layerObj) {
                if (layerObj.name === "toe") {
                    coords = layerObj.coords;
                }
            })
})()