【问题标题】:After creating an array and pushing objects to it, objects are [Object] and not the actual data创建数组并将对象推送到其中后,对象是 [Object] 而不是实际数据
【发布时间】:2020-08-31 17:23:07
【问题描述】:

在节点中,我试图将 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'

  }
]

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

此处理将为 s3 中的每个实际顶级文件夹创建一个对象(示例中为“一些”)。这个对象将有一个名称,以及一个像上面那样的文件对象列表。

这是我的功能:

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] 到文件之前的最后一个文件夹的任何内容,或者如果 split 的长度仅为 3,则为 ''。

感谢您的帮助!

【问题讨论】:

  • 这就是控制台显示深度嵌套对象的方式。
  • 使用console.dir() 而不是console.log()。
  • 更好的是,使用调试器
  • 顺便说一句,result[index].files = [...result[index].files, obj] 可以更简单地写成result[index].files.push(obj)
  • 使用 |console.log( JSON.stringify(result,0,2) )

标签: javascript arrays node.js data-manipulation


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-21
    • 2021-12-03
    • 2022-01-02
    • 1970-01-01
    • 2015-03-19
    • 2021-12-28
    • 2013-11-16
    • 1970-01-01
    相关资源
    最近更新 更多