1。第一个响应是具有两个字段的类别,类别和名称。
categories = [{ category: '1', name: 'category1' },
{ category: '2', name: 'category2' }]
2。第二个响应是提交三个字段,commit,branch和Commit ID。
commits = [{ commit: '1', branch: '1', Commit ID: 'commitid1' },
{ commit: '1', branch: '2', Commit ID: 'commitid2' }]
3。我想根据具有以下结构的类别创建一个合并的JSON:
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' }]
我搜索并找到了几种连接或扩展两个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);
}
}
});
}
}
}
});
}
}
});
答案 0 :(得分:0)
这个怎么样?
var all= categories.map(function(cat){
cat.body=commits.filter(x=>x.branch==cat.category);
return cat;
})
答案 1 :(得分:0)
也许尝试以下方法:
var all = [];
categories.forEach((e)=>{
var myIndex = categories.indexOf(e);
e.body=commits[myIndex];
all.push(e);
});
console.log(all);
然后,您可以使用JSON.stringify获取所需的输出。
答案 2 :(得分:0)
我对此进行了测试并且有效:
var all= categories.map(function(cat,index){
cat.body=commits[index];
return cat;
})
如果您想将“body”属性作为数组:
var all= categories.map(function(cat,index){
var body = [];
body.push(commits[index]);
cat["body"] = body;
return cat;
})
console.log("all :",JSON.stringify(all));