无法访问对象内的对象

时间:2016-07-29 16:22:45

标签: javascript

代码:

var items = {}; //object to store everything
var ilist = [
//a couple items to pull data from
];

ilist.forEach(function(ilist, index){
    var item = {
        quantity: //getQuantity().text(),
        type: //getType().text()
    }
    items["item"+index] = item;
});

console.dir(items); 

此控制台输出显示:

Object
    item0: Object
        quantity: "xx"
        type: "xx"
    item1: Object
        quantity: "xx"
        type: "xx"

因此它看起来像对象中的对象,并且所有内容都已正确存储。然后我尝试用console.log(items [0]),console.log(items.item0)来解决问题,我在控制台中得到了未定义的东西。 console.log(items.item0.quantity)返回:未捕获的TypeError:无法读取未定义的属性“数量”。为什么我无法从物体中拉出任何东西?我希望把它变成一个JSON对象,但是JSON.stringify(items);也没用。

2 个答案:

答案 0 :(得分:0)

首先,您应该使用reduce而不是forEach



var list = [
  {id: 0, name: 'item0', qty: 1, type: 'type1'},
  {id: 1, name: 'item1', qty: 2, type: 'type1'},
  {id: 2, name: 'item2', qty: 1, type: 'type1'},
  {id: 3, name: 'item3', qty: 3, type: 'type1'}
];

var items = list.reduce(function(previous, item, index){
  var newItem = {
    quantity: item.qty,
    type: item.type
  };
  
  previous["item" + index] = newItem;
  return previous;
}, {});

console.log(items['item0']);




我不知道你是如何创建你的项目的,所以我创建了自己的项目,但它只是一个例子......但是,这应该有效......

答案 1 :(得分:0)

您正在使用forEach略有错误...回调的参数是 元素值 元素索引 正在遍历的数组

所以你的forEach正在重新定义' ilist'变量与当前元素值。

尝试使用

ilist.forEach(function(element, index){...} {
var item = {
    quantity: element.quantity

...

这样做,我没有使用console.log(items.item0);