从函数返回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
答案 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;
}
})
})()