2017-11-16 14 views
0

1.最初の応答は、カテゴリと名前の2つのフィールドを持つカテゴリです。NODE JSを使用して2つの配列JSONネストされたレスポンスをマージできますか?

categories = [{ category: '1', name: 'category1' }, 
       { category: '2', name: 'category2' }] 

2。第2の応答は三つのフィールド、コミット、ブランチでコミットされ、IDをコミットします。私が検索し、参加または拡張するいくつかの方法を発見した

all = [ 
     { category: '1', name: 'category1', 
      body: [{ commit: '1', branch: '1', Commit ID: 'commitid1' }], 
     { category: '2', name: 'category2', 
       body: [{ commit: '1', branch: '1', Commit ID: 'commitid2' }] 

3.

commits = [{ commit: '1', branch: '1', Commit ID: 'commitid1' }, 
      { commit: '1', branch: '2', Commit ID: 'commitid2' }] 
は、私は1つは、次のような構造を持つことになり、カテゴリに基づいて、JSONを合併作成したいです2つのjsonオブジェクトですが、それに似ていません。

ご協力いただければ幸いです。これについて

私の実際のコード

exports.getIssues = function(req, res) { 
console.log(filename + '>>get Issues>>'); 
var response = { 
    status: Boolean, 
    message: String, 
    data: String 
}; 
var request = require('request'); 
var username = 
    const.username; 
var password = 
    const.password; 
var options = { 
    url: 'https://computenext.atlassian.net/rest/api/2/search?jql=status+%3D+Resolved+ORDER+BY+updated', 
    auth: { 
    username: username, 
    password: password 
    } 
}; 

request(options, function(error, obj) { 
     if (error) { 
     response.message = appmsg.DATA_NT_FOUND; 
     response.status = false; 
     response.data = obj; 
     res.send(response); 
     } else { 
     response.message = appmsg.DATA_FOUND; 
     response.status = true; 
     response.data = JSON.parse(obj.body); 
     //res.send(response); 
     var issueKey = response.data.issues; 

     // var keyData = issueKey[0].key; 
     // console.log(response.data.issues); 
     // console.log(keyData); 
     var output = []; 
     for (var i = 0; i < issueKey.length; i++) { 
      var issue = issueKey[i].key; 
      //var key = []; 
      //key.push(issue); 
      console.log(issue); 

      var respon = { 
      status: Boolean, 
      message: String, 
      data: String 
      }; 
      var request = require('request'), 
      username = 
      const.username, 
      password = 
      const.username, 
      url = "https://computenext.atlassian.net/rest/api/2/issue/" + issue, 
      auth = "Basic " + new Buffer(username + ":" + password).toString("base64"); 

      //console.log(url); 
      request({ 
      url: url, 
      headers: { 
       "Authorization": auth 
      } 
      }, function(err, object) { 
      if (object) { 

       var info = object; 
       output.push(info); // this is not working as ouput is undefined at this point 
       //var pout = JSON.parse(output); 
       //console.log(info); 
       console.log("=============================================================================="); 
       //console.log(output); 
       console.log("******************************************************************************"); 
       if (issueKey.length === output.length) { 
       respon.message = appmsg.DATA_FOUND; 
       respon.status = true; 
       respon.data = output; 
       //console.log(output); 
       //res.send(respon); 


       var id = issueKey[0].id; 
       console.log(id); 

       var commitout = []; 
       for (var i = 0; i < issueKey.length; i++) { 
        var commits = issueKey[i].id; 
        console.log(commits); 



        var request = require('request'), 
        username = 
        const.username, 
        password = 
        const.password, 
        url = "https://computenext.atlassian.net/rest/dev-status/1.0/issue/detail?issueId=" + commits + "&applicationType=stash&dataType=repository", 
        auth = "Basic " + new Buffer(username + ":" + password).toString("base64"); 

        //console.log(url); 
        var test = []; 
        request({ 
         url: url, 
         headers: { 
         "Authorization": auth 
         } 
        }, function(err, obj1) { 
         if (obj1) { 

         var info1 = obj1.body; 
         commitout.push(info1); 
         if (issueKey.length === commitout.length) { 
          respon.message = appmsg.DATA_FOUND; 
          respon.status = true; 
          respon.data = commitout; 
          // console.log(commitout); 
          //var test = merge(output, commitout); 

          var resultdone = []; 
          request({ 
          url: url, 
          headers: { 
           "Authorization": auth 
          } 
          }, function(err, obj1) { 
          if (obj1) { 

           var info1 = obj1.body; 
           commitout.push(info1); 
           if (issueKey.length === commitout.length) { 

           // console.log(commitout); 
           //var test = merge(output, commitout); 
           //var text = output.body[0]; 
           //var resultdone = []; 
           resultdone.push(commitout.concat(output)); 
           console.log(resultdone); 
           respon.message = appmsg.DATA_FOUND; 
           respon.status = true; 
           respon.data = resultdone; 
           res.send(respon); 
           } 
          } 
          }); 
         } 

         } 
        } 

        }); 

       } 
      } 

      }); 
+2

を簡単な方法はありません、あなたはそれらの配列を反復処理する必要があります。これまでに試したことをここに貼り付けてください。 –

+1

各カテゴリに属する​​コミットをどのように知っていますか?それとも単にインデックスの位置を割り当てるつもりですか?検索していくつかの方法を見つけた場合(あなたの質問を再現できる既存の回答)、おそらくあなたはあなたが試したものとそれがなぜ適用されないのかを示すべきです。全体的に、あなたはあなたよりもはっきりとあなたの意図を説明する必要があります。 –

答えて

0

私はこれをテストし、それが働いた:

var all= categories.map(function(cat,index){ 
      cat.body=commits[index]; 
      return cat; 
}) 

あなたは配列として「身体」属性にしたい場合:

var all= categories.map(function(cat,index){ 
    var body = []; 
    body.push(commits[index]); 
      cat["body"] = body; 
      return cat; 
}) 

console.log("all :",JSON.stringify(all)); 
+0

期待された応答を得ていません..正しい解決策を教えてください。 – Jivi

+0

これは実際には解決策ですが、コードで実装したい場合は、コードをよりリファクタリングして、コード内で同じ配列名(カテゴリ、コミットなど)を使用することもできます。カテゴリのレスポンスやコミットについてもコメントしてください。 –

+0

あなたはどんなレスポンスになりますか、エラーがあった場合はどうしたらいいですか?あなたはより多くの情報を私達に提供する必要があります –

0

何?

var all= categories.map(function(cat){ 
          cat.body=commits.filter(x=>x.branch==cat.category); 
          return cat; 
     }) 
+0

いいえ、私は期待できません。上記のコードを確認してください。お願いします! – Jivi

0

おそらく、次の操作を試してください。

var all = []; 

categories.forEach((e)=>{ 

    var myIndex = categories.indexOf(e); 

    e.body=commits[myIndex]; 

    all.push(e); 

}); 

console.log(all); 

あなたはその後、所望の出力を得るためにJSON.stringifyを使用することができます。

+0

それを試してみてください。しかし、正しく動作しませんでした。私は期待通りの応答を得ることができません – Jivi

関連する問題