Node.js 循环遍历嵌套的 Javascript 对象

Posted

技术标签:

【中文标题】Node.js 循环遍历嵌套的 Javascript 对象【英文标题】:Node.js loop through nested Javascript object 【发布时间】:2017-04-08 11:08:15 【问题描述】:

我想拥有来自 Facebook 的帖子和附件,以便创建帖子列表。问题是我想为每个帖子提要将属性:id、消息和任何附件放在一个数组中。我不确定是否需要在数组中迭代对象,或者我是否可以选择 ID 并获取相关信息。

我还使用 async.waterfall() 来获取同步调用,因为我将进行依赖于前一个调用的其他调用。

我试过这个来获取附件的 id、message 和 src url:

var async = require("async");
var graph = require('fbgraph');

async.waterfall([
    getFeed,
    getPostPicture,
], function (err, result) 
);
function getFeed(callback) 
    graph.get("/.../feed" + "?fields=message,attachments&access_token=APPID|APPSECRET", function(err, res) 
        callback(null, res);
    );

function getPostPicture(arg1, callback) 

    var feedData = arg1.data;
    for(var i in feedData)
    
        var id = feedData[i].id;
        var message = feedData[i].message;
        var feedAttachment = feedData[i].attachments

        for (var j in feedAttachment)
        
            var attachment = feedAttachment.data;
            var attachmentURL = attachment[i].src;
            for (var j in attachmentURL)
            
                var attachmentURL = feedAttachment.src;
            
        
    
        console.log(attachment);

上面会输出:

[  description: 'post message 1',
    media:  image: [Object] ,
    target:
      id: '...',
       url: 'https://www.facebook.com/.../photos/a............/.../?type=3' ,
    title: 'Timeline Photos',
    type: 'photo',
    url: 'https://www.facebook.com/.../photos/a............/.../?type=3'  ]

下面是我第一次在源代码中调用graph.get的响应

我需要 data -> [message, id, attachments -> data[src] ]


  "data": [
    
      "message": "post message 1",
      "id": "..._...",
      "attachments": 
        "data": [
          
            "description": "picture 1",
            "media": 
            "image": 
            "height": 256,
            "src": "https://scontent.xx.fbcdn.net/v/t1.0-9/..._..._..._n.png?oh=...&oe=...",
            "width": 256
          
        ,
        "target": 
          "id": "...",
          "url": "https://www.facebook.com/.../photos/a............/.../?type=3"
        ,
        "title": "Timeline Photos",
        "type": "photo",
        "url": "https://www.facebook.com/.../photos/a............./..../?type=3"
       
      ]
     
    ,
    
      "message": "Test status update 123",
      "id": "..._..."
    
  ],
  "paging": 
  "previous": "https://graph.facebook.com/v2.8/.../feed?fields=message,attachments&format=json&since=...&access_token=...&limit=25&__paging_token=enc_...&__previous=1",
  "next": "https://graph.facebook.com/v2.8/.../feed?fields=message,attachments&format=json&access_token=...&limit=25&until=...&__paging_token=enc_..." 
  

【问题讨论】:

那么console.log(attachment); 是如何为您提供该输出的呢?您确定您的代码粘贴正确吗?请扩展您的代码以更好地显示生成输出的位置。 【参考方案1】:

当你在getPostPicture函数中使用for循环时,i变量实际上是数组feedData中的元素,所以你必须i.idi.attachmentsi.message。另外我认为,由于您在 2 个循环中使用相同的 j,其中一个嵌套在另一个循环中,因此它也无法正常工作,因此您可能还必须更改它,并用您期望的输出类型解释您的问题.

【讨论】:

以上是关于Node.js 循环遍历嵌套的 Javascript 对象的主要内容,如果未能解决你的问题,请参考以下文章

Node.js由于异步而未正确执行嵌套循环

node js redis循环遍历每个哈希键值

异步 node.js:带有回调的嵌套数组

急! jquery $.each 嵌套循环遍历

外循环遍历每一行,嵌套循环遍历每个字符

Node.js 中 For 循环中的 async.waterfall