2017-05-20 60 views
0

我試圖用google搜索這個問題,並通過stackoverflow搜索,但沒有成功,所以作爲最後的手段,我只是爲了以防萬一任何人都可以將我指向正確的方向。如何獲取JavaScript對象數組中對象數組的長度?

我已經把我的代碼看起來像下面的例子。

var objectInfo = [ 
{ 
    name:"object1", 
    materials: [{ 
     name: "wood", 
     quantity:10 
    }, { 
     name: "stone", 
     quantity:16 
    }], 
}, { 
    name:"object2", 
    materials: [{ 
     name: "wood", 
     quantity:10 
    }, { 
     name: "stone", 
     quantity:16 
    }, { 
     name: "bricks", 
     quantity:100 
    }], 
}] 

我的問題是,我將如何獲得我的材料對象數組的長度?

我試圖做到這一點如下:

function getMaterialsArrayLength(objName) { 
    for (i = 0; i < objectInfo.length; i++) { 
     if (objectInfo[i].name == objName) { 
      return objectInfo[i].materials.length 
     } 
    }  
}; 

但是返回的錯誤是「無法讀取的未定義的屬性的材料」。有沒有人有任何可能的解決方案來查找數組長度?

我很抱歉,如果這之前發佈。

+1

缺少括號這裏:'用於(I = 0;我 wostex

+0

@wostex修正了這個問題,但它並沒有幫助。 –

+0

爲什麼?您的代碼現在可以運行:https://jsfiddle.net/wostex/048pqzud/ – wostex

回答

0

您無法獲取不存在的數組長度;更準確地說,你看到的是未定義數組的元素,所以並無重大發現的長度:

1

var objectInfo = [{ 
 
    name: "object1", 
 
    materials: [{ 
 
    name: "wood", 
 
    quantity: 10 
 
    }, { 
 
    name: "stone", 
 
    quantity: 16 
 
    }], 
 
}, { 
 
    name: "object2", 
 
    materials: [{ 
 
    name: "wood", 
 
    quantity: 10 
 
    }, { 
 
    name: "stone", 
 
    quantity: 16 
 
    }, { 
 
    name: "bricks", 
 
    quantity: 100 
 
    }], 
 
}] 
 

 
function getMaterialsLength(objName) { 
 
    return objectInfo.find(o => o.name === objName).materials.length; 
 
} 
 

 
console.log(getMaterialsLength('object2'));

可能要添加一些錯誤檢查。

0

其指標只是訪問對象:

var objectInfo = [ 
 
{ 
 
    name:"object1", 
 
    materials: [{ 
 
     name: "wood", 
 
     quantity:10 
 
    }, { 
 
     name: "stone", 
 
     quantity:16 
 
    }], 
 
}, { 
 
    name:"object2", 
 
    materials: [{ 
 
     name: "wood", 
 
     quantity:10 
 
    }, { 
 
     name: "stone", 
 
     quantity:16 
 
    }, { 
 
     name: "bricks", 
 
     quantity:100 
 
    }], 
 
}]; 
 

 
console.log("objectInfo[0].materials.length: " + objectInfo[0].materials.length); 
 
console.log("objectInfo[1].materials.length: " + objectInfo[1].materials.length);

0

使用lodash.js。

var objectInfo = [ 
 
{ 
 
    name:"object1", 
 
    materials: [{ 
 
     name: "wood", 
 
     quantity:10 
 
    }, { 
 
     name: "stone", 
 
     quantity:16 
 
    }], 
 
}, { 
 
    name:"object2", 
 
    materials: [{ 
 
     name: "wood", 
 
     quantity:10 
 
    }, { 
 
     name: "stone", 
 
     quantity:16 
 
    }, { 
 
     name: "bricks", 
 
     quantity:100 
 
    }], 
 
}]; 
 
function getMaterialsLength(objName) { 
 
    _.each(objectInfo, function(obj) { 
 
     if (obj.name == objName) { 
 
     console.log(_.size(obj.materials)); 
 
     } 
 
    }); 
 
} 
 
getMaterialsLength('object2');
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/1.2.1/lodash.min.js"></script>