未捕获(承诺)TypeError:无法设置未定义的属性“ 0”

时间:2018-12-13 00:22:00

标签: javascript json promise

不知道我在做什么错。基本上,我是从API检索信息。将JSON数据中的2个属性设置为名为“名称”和“利润”的数组。我想将它们组合起来,以便“名称”数组是对象中名为“ itemProfit”的“键”,而该键的值是利润数组。

示例:

name = ['item1'];
profit = [1000];

itemProfit = {item1: 1000};

我能够正确地将名称/利润数组输出到控制台,但是我的错误是在行上生成的:

itemProfit.name[i] = profit[i];

完整代码如下:

btn_top.addEventListener("click", function () {
  fetch(url)
    .then(function(response) {
      return response.json();
    })
    .then(function(myJson) {
      let name = [];
      let profit = [];
      Object.values(myJson).forEach(e=> {
        name.push(e.name);
        profit.push(e.sell_average - e.buy_average);
      });
      var itemProfit = {}
      for (i=0; i<name.length; i++) {
        itemProfit.name[i] = profit[i]; // where error occurs
      };
      // console.log(name);
      // console.log(profit);
      console.log(itemProfit);
    });
});

错误消息:

main.js:52 Uncaught (in promise) TypeError: Cannot set property '0' of undefined
    at main.js:52

任何帮助,谢谢您〜

1 个答案:

答案 0 :(得分:2)

好吧,您的代码正在做的是尝试访问itemProfit.name [0]。 itemProfit没有属性名称,因此当您尝试访问未定义的[0]时,会出现该错误

itemProfit.name[i]

您真正想做的是:

itemProfit[name[i]] = profit[i]

通过这种方式,您将profit[i]分配给itemProfit上与name[i]对应的键