gpt4 book ai didi

javascript - 使用 JavaScript 连接 2 个具有不同主键的 JSON 对象

转载 作者:行者123 更新时间:2023-11-30 13:53:17 25 4
gpt4 key购买 nike

我有 2 个 json 数组,我需要将它们连接在一起。

但是如何使用具有不同键值(ServerName 和 ComputerName)的 JAvascript 连接 2 个 JSON 数组?

var servers = {
0:{ServerName:"PC1", OS:"Windows", PRPName: "NO_PRP", SLA: "gold"},
1:{ServerName:"PC2", OS:"Linux", PRPName: "NO_PRP", SLA: "silver"},
2:{ServerName:"PC3", OS:"Windows", PRPName: "NO_PRP", SLA: "bronz"},
3:{ServerName:"PC4", OS:"Windows", PRPName: "NO_PRP", SLA: "gold"},
4:{ServerName:"PC5", OS:"Linux", PRPName: "NO_PRP", SLA: "bronz"},
5:{ServerName:"PC6", OS:"Windows", PRPName: "NO_PRP", SLA: "bronz"}
};

var computers = {
0:{Name:"PC1", location:"Amsterdam", PatchStatus: "true", RebootPending: "true"},
1:{Name:"PC2", location:"London", PatchStatus: "true", RebootPending: "true"},
2:{Name:"PC3", location:"Berlin", PatchStatus: "true", RebootPending: "false"},
3:{Name:"PC4", location:"Berlin", PatchStatus: "false", RebootPending: "true"},
4:{Name:"PC5", location:"London", PatchStatus: "true", RebootPending: "false"},
5:{Name:"PC6", location:"Amsterdam", PatchStatus: "true", RebootPending: "true"}
};

结果需要是:

var endresult= {
0:{Name:"PC1", location:"Amsterdam", PatchStatus: "true", RebootPending: "true", OS:"Windows", PRPName: "NO_PRP", SLA: "gold"},
1:{Name:"PC2", location:"London", PatchStatus: "true", RebootPending: "true", OS:"Linux", PRPName: "NO_PRP", SLA: "silver"},
2:{Name:"PC3", location:"Berlin", PatchStatus: "true", RebootPending: "false", OS:"Windows", PRPName: "NO_PRP", SLA: "bronz"},
3:{Name:"PC4", location:"Berlin", PatchStatus: "false", RebootPending: "true", OS:"Windows", PRPName: "NO_PRP", SLA: "gold"},
4:{Name:"PC5", location:"London", PatchStatus: "true", RebootPending: "false", OS:"Linux", PRPName: "NO_PRP", SLA: "bronz"},
5:{Name:"PC6", location:"Amsterdam", PatchStatus: "true", RebootPending: "true", OS:"Windows", PRPName: "NO_PRP", SLA: "bronz"}
};

最佳答案

您可以遍历计算机数组并使用 Array.find()通过比较名称属性找到匹配的服务器。

然后用 spread operator 合并两个条目.

var servers = {
"servers":[
{"ServerName":"PC1", "OS":"Windows"},
{"ServerName":"PC2", "OS":"Linux"},
{"ServerName":"PC3", "OS":"Windows"}
]
}

var computers = {
"computers":[
{"ComputerName":"PC1", "location":"Amsterdam"},
{"ComputerName":"PC2", "location":"London"},
{"ComputerName":"PC3", "location":"Berlin"}
]
}

var mergedObject = {computers: []};

for(var computer of computers.computers){

var server = (({ OS }) => ({ OS }))(servers.servers.find(function(server){return server.ServerName === computer.ComputerName}));
// Get only "OS" property of server

var cmp = {...computer, ...server};
mergedObject.computers.push(cmp);
}

console.log(mergedObject);


更新

根据 OP 的第二个问题,我将代码片段更新如下:

var servers = {
0:{ServerName:"PC1", OS:"Windows", PRPName: "NO_PRP", SLA: "gold"},
1:{ServerName:"PC2", OS:"Linux", PRPName: "NO_PRP", SLA: "silver"},
2:{ServerName:"PC3", OS:"Windows", PRPName: "NO_PRP", SLA: "bronz"},
3:{ServerName:"PC4", OS:"Windows", PRPName: "NO_PRP", SLA: "gold"},
4:{ServerName:"PC5", OS:"Linux", PRPName: "NO_PRP", SLA: "bronz"},
5:{ServerName:"PC6", OS:"Windows", PRPName: "NO_PRP", SLA: "bronz"},
6:{ServerName:"PC7", OS:"Windows", PRPName: "NO_PRP", SLA: "bronz"},
};

var computers = {
0:{Name:"PC1", location:"Amsterdam", PatchStatus: "true", RebootPending: "true"},
1:{Name:"PC2", location:"London", PatchStatus: "true", RebootPending: "true"},
2:{Name:"PC3", location:"Berlin", PatchStatus: "true", RebootPending: "false"},
3:{Name:"PC4", location:"Berlin", PatchStatus: "false", RebootPending: "true"},
4:{Name:"PC5", location:"London", PatchStatus: "true", RebootPending: "false"},
5:{Name:"PC6", location:"Amsterdam", PatchStatus: "true", RebootPending: "true"},
6:{Name:"PC9", location:"Amsterdam", PatchStatus: "true", RebootPending: "true"}
};

// Please note that Objects must have a key, so I added 0, 1, 2 etc as keys.

var mergedArray = [];

for(var computer of Object.values(computers)){

var findItem = Object.values(servers).find(function(server){return server.ServerName === computer.Name});
if(!findItem){
continue;
}

var {ServerName, ...server} = findItem;
// {ServerName, ...server} is called "desctructring". You set "ServerName" property in "ServerName" a variable
// and all the other properties to "server" variable

var cmp = {...computer, ...server};
mergedArray.push(cmp);
}

console.log(mergedArray);

希望这对您有所帮助。

关于javascript - 使用 JavaScript 连接 2 个具有不同主键的 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57784667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com