0

関数からオブジェクトを返すときに、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
4

2 に答える 2

6

forEachすぐに実行された関数式からではなく、コールバックから戻っています。代わりにこれを行うことができます (問題の値に一致するlayer配列の要素が 1 つだけ存在することがわかっていると仮定します。name

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

2 つのステートメントがあることに注意してreturnください。最初のステートメントは IIFE から返され、2 番目のステートメントはfilterコールバックから返されます。

varまた、キーワードをこのステートメントに移動したことにも注意してください。空のオブジェクトを割り当ててからcoords上書きしても意味がありません。

于 2013-04-17T06:46:14.440 に答える
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;
                }
            })
})()
于 2013-04-17T06:48:04.717 に答える