创建数组并将对象推入数组后,对象是[Object],而不是实际数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建数组并将对象推入数组后,对象是[Object],而不是实际数据相关的知识,希望对你有一定的参考价值。

在节点中,我试图将对象数组从S3(解析时超级烦人的响应)转变为更可用的前端。初始对象格式为:

[
  {
    Key: 'some/folder/structure/file.jpg',
    LastModified: 2020-05-14T02:16:59.000Z,
    ETag: '"SomeETag"',
    Size: 83630,
    StorageClass: 'STANDARD'
  }
]

我正在尝试将其更改为类似数组的数组:

name: "some"
files: [
  {

    key: 'some/folder/structure/file.jpg',
    name: 'file.jpg',
    folder: 'folder',
    subfolder: 'structure'

  }
]

键是我需要从s3检索对象的键。name是用于前端显示的文件名。该文件夹最终成为我要在其中显示文件的顶级文件夹。子文件夹是介于文件夹和文件名之间的任何内容。

此处理将为s3(示例中为'some')中的每个实际顶级文件夹创建一个对象。该对象将具有一个名称,以及一个类似于上述对象的文件对象列表。

这是我的职责:

function processResponse(res) {
  var result = [];
  res.forEach(item =>{
    if(item.Key.slice(-1) === '/') return;
    const split = item.Key.split('/');
    var obj = {
      key: item.Key,
      name: split[split.length-1],
      folder: split[1],
      subfolder: split.length <= 3 ? '' : split.join([2,split.length-2])
    }
    var index = result.findIndex(x => x.name === split[1])
    if(index === -1) {
      result = [...result, {
        name: split[1],
        files: []
      }]
      index = result.length-1
    }
    result[index].files = [...result[index].files, obj];
  });
  console.log(result)
  return result;
}

我看到的问题与任何单个文件夹的文件数组有关。当我用控制台记录生成的数组时,返回的不是这样,而是显示每个文件的数据:

[
  {
    name: 'Forms',
    files: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ]
  }
]

除了数据丢失之外,它似乎也打破了返回前端的局面。如何将实际数据推送到每个文件数组中,以便可以进行console.log-ed并正确返回?]

奖金:我认为我制作子文件夹字符串的方法是错误的。基本上我想要从split [2]到文件之前的最后一个文件夹的任何内容,如果分离的长度只有3,则需要''”。

谢谢您的帮助!

答案

事实证明,这很好,我的问题是不了解控制台如何掩盖结构化的深层数据。要查看全部数据,我需要做的是:

console.log(JSON.stringify(result,0,2))

以上是关于创建数组并将对象推入数组后,对象是[Object],而不是实际数据的主要内容,如果未能解决你的问题,请参考以下文章

将对象推入数组

将对象推入数组不适用于模态角度js

为什么我的对象没有被推入不同的数组?

JavaScript对象和数组

如何将对象数组推入数组

将对象推入javascript深拷贝还是浅拷贝中的数组?