Javascript 推送不是一个函数

Elv*_*ra 1 javascript arrays

我想创建一个这样的对象:

"store1":
{
  "isbn":"3129321903",
  "title":"here comes the title",
  "author":"author of the book"
},
{
 "isbn":"3333333333",
 "title":"title of second book",
 "author":"author of second book"
}
"store2":
{
  "isbn":"3333311111",
  "title":"title of book from store2",
  "author":"author of book from store2"
}
Run Code Online (Sandbox Code Playgroud)

我试过这样的事情:

var storeArray = [];
for(var i = 0; i < response.data.bookInfo.length; i++){
  var keys = Object.keys(response.data.bookInfo[i]);
  var storename = keys.filter(key => key != 'isbn' && key != 'metadata'); // get storename

  if(storeArray[storename] == undefined){
    storeArray[storename] = response.data.bookInfo[i];
  }
  else{
    storeArray[storename].push(response.data.bookInfo[i]);
  }
}
Run Code Online (Sandbox Code Playgroud)

但这只会让我出现以下错误:

类型错误:storeArray["amazon"].push 不是函数

当我使用时storeArray[storename] = response.data.bookInfo[i],它只在控制台中显示一行,我想将响应数据添加到 storeArray[storename] 以按商店获取书籍列表。

Sur*_*yan 5

这意味着您storeArray[storename]的不是数组。在

storeArray[storename] = response.data.bookInfo[i];
Run Code Online (Sandbox Code Playgroud)

您只需storeArray[storename]为不是数组的分配一个值。您首先需要创建一个数组,然后将该元素放入其中。

storeArray[storename] = [ response.data.bookInfo[i] ];
Run Code Online (Sandbox Code Playgroud)

并且在下一次迭代中,您将拥有一个包含一个元素的数组,并且可以push在其上使用。