节点数组包含"对象"而不是实际的JS对象

Kil*_*ian 1 javascript arrays json node.js

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

我有一些javascript代码,它创建一个包含标记为trip的数组的json对象.此数组中的每个对象都包含一个标记为节点的数组,我希望该数组包含具有旅行的所有特定节点的对象.

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);

}
Run Code Online (Sandbox Code Playgroud)

结果看起来像这样.

{ 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] } ] }
Run Code Online (Sandbox Code Playgroud)

我从中拉出数据的数组,第二个用于循环循环的数组,包含几个元素.所以我希望在nodes数组中看几次测试对象.我不太明白如何解释我得到的东西.它是一个包含未指定对象的数组吗?如果是这样,为什么?

nic*_*law 5

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

要测试它,请尝试:

console.log(JSON.stringify(json, null, 4));
Run Code Online (Sandbox Code Playgroud)

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

  • 当传递一个对象时,console.log实际上使用了引擎盖下的util.inspect方法.如果直接调用util.inspect,则可以路径显式深度参数(请参阅文档).JSON.stringify丢失了一些数据,因此使用util.inspect可以更好地查看您正在处理的内容. (2认同)