【问题标题】:Trouble accessing object within object无法访问对象内的对象
【发布时间】:2016-07-30 01:06:09
【问题描述】:

代码:

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) 来解决问题,但我在控制台中得到了 undefined。 console.log(items.item0.quantity) 返回:未捕获类型错误:无法读取未定义的属性“数量”。为什么我无法从对象中拉出任何东西?我希望把它变成一个 JSON 对象,但是 JSON.stringify(items);也没有用。

【问题讨论】:

  • 还有什么 items['item0'] 说的?
  • 实际上它说的是 Uncaught ReferenceError: item0 is not defined
  • 请添加ilist的内容。
  • 奇怪...你能在你复制的地方创建一个快速的sn-p吗?它可能与两次使用的“ilist”变量有关......
  • 您的代码按原样工作(当您插入数量、类型和项目的硬编码值时).. 其他地方肯定有问题。 repl.it/ChXs/1

标签: javascript


【解决方案1】:

首先你应该使用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']);

我不知道您如何创建您的项目,所以我创建了自己的项目,但这只是一个示例...不过,这应该可以...

【讨论】:

    【解决方案2】:

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

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

    尝试从

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

    ...

    这样做,我对 console.log(items.item0); 没有任何问题

    【讨论】:

      猜你喜欢
      • 2020-10-10
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      • 2017-05-23
      • 2011-11-02
      相关资源
      最近更新 更多