【问题标题】:Node array contains 'Object' instead of actual JS object节点数组包含“对象”而不是实际的 JS 对象
【发布时间】:2014-08-07 23:04:52
【问题描述】:

我确实意识到这个问题的标题选择得很尴尬,如果有人有建议,我很乐意将其更改为更具描述性的内容,我只是不知道如何以不同的方式描述它。

我有这段 javascript 代码,它正在创建一个 json 对象,其中包含一个标记为 trips 的数组。这个数组中的每个对象都包含一个标记为节点的数组,我希望它包含具有旅行所有特定节点的对象。

var json = {origin: data.origin.name, destination: data.destination.name, trips: []};

for (var i = 0; i < data.trips.length; i++) {
    var departure = data.trips[i].dep.time;
    var arrival   = data.trips[i].arr.time;

    var trip = {departure: departure, arrival: arrival, nodes: []}

    for (var j = 0; j < data.trips[i].legs.length; j++) {
        trip.nodes.push({test: 'test'});
    }

    json.trips.push(trip);

}

结果是这样的。

{ origin: 'Dresden, Helmholtzstraße',
  destination: 'Dresden, Zellescher Weg',
  trips:
   [ { departure: '12:04',
       arrival: '12:26',
       nodes: [Object] },
     { departure: '13:02',
       arrival: '13:11',
       nodes: [Object] } ] }

我从中提取数据的数组(第二个 for 循环循环通过的数组)包含多个元素。所以我希望在节点数组中多次看到测试对象。我不太明白如何解释我得到的东西。它是一个包含未指定对象的数组吗?如果是这样,为什么?

【问题讨论】:

  • 你是怎么得到那个输出的?
  • 你是什么意思?将 json 变量记录到控制台?
  • 在浏览器中?你在 node.js 中运行吗?控制台日志?在 repl 提示符中打印它?
  • 这是一个我正在尝试构建的节点模块,它是另一个测试文件所必需的。然而,模块本身暂时将其记录到控制台,并通过我终端中的节点运行。
  • 它只是打印'[Object]',因为这就是.toString() 方法在登录到控制台时返回的内容。如果您在浏览器控制台中运行,您将能够使用鼠标导航对象。

标签: javascript arrays json node.js


【解决方案1】:

我假设这是您console.log 对象时的输出。我相信节点console.log 函数将回退到仅在对象达到一定深度时显示Object。这样可以确保您的控制台不会完全被文本淹没。

为了测试它尝试做:

console.log(JSON.stringify(json, null, 4));

这会将 json 对象转换为格式良好的文本,应该完美记录。

【讨论】:

  • 太棒了,所以一切都很好。谢谢!我花了一天的时间思考这个 m)
  • console.log 在传递对象时实际上使用了 util.inspect 方法。如果您直接调用 util.inspect ,则可以路径显式深度参数(请参阅文档)。 JSON.stringify 丢失了一些数据,因此使用 util.inspect 是一种更好地查看您正在处理的内容的更好方法。
  • 酷,我不知道。我通常不建议对对象进行字符串化,因为这在很多情况下都会中断。但这可能是一个很好的健全性检查,就像在这种情况下一样。
  • 非常感谢
猜你喜欢
  • 1970-01-01
  • 2021-08-11
  • 2023-03-20
  • 2018-01-21
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
相关资源
最近更新 更多