我在以所需格式构造对象
时遇到问题。
我想以这种方式获取对象
{"pendrive":['went to each object and picked "TEST_HOME" value'],"minichip":['went to each object and picked "TEST_PROXY" value']}
必须通过先转到 mount_status
然后转到 key
从每个对象
收集上述数组
的值,对于示例 TEST_PROXY
、TEST_HOME
、TEST_ARCHIVE
、TEST_TARGET
所需输出: {"pendrive":["error","na","error","ok","na","na"]}
对于键“TEST_HOME”
其他也相同
这是我尝试过的:
var nodeSum = {};
var nodeStatus = {
"node_stats": {
"pendrive": {
"mount_status": {
"TEST_PROXY": "error",
"TEST_TARGET": "error",
"TEST_ARCHIVE": "error",
"TEST_HOME": "error"
}
},
"minichip": {
"mount_status": {
"TEST_PROXY": "na",
"TEST_TARGET": "na",
"TEST_ARCHIVE": "na",
"TEST_HOME": "na"
}
},
"simcard": {
"mount_status": {
"TEST_HOME": "error",
"TEST_TARGET": "error",
"TEST_ARCHIVE": "error",
"TEST_PROXY": "error"
}
},
"hostname": [
"nikola",
"goldplus",
"pendrive",
"simcard",
"airtel",
"minichip",
"voda"
],
"airtel": {
"mount_status": {
"TEST_PROXY": "ok",
"TEST_TARGET": "ok",
"TEST_ARCHIVE": "ok",
"TEST_HOME": "ok"
}
},
"voda": {
"mount_status": {
"TEST_HOME": "na",
"TEST_TARGET": "na",
"TEST_ARCHIVE": "na",
"TEST_PROXY": "na"
}
},
"nikola": {
"mount_status": {
"TEST_HOME": "na",
"TEST_ARCHIVE": "na",
"TEST_TARGET": "na",
"TEST_PROXY": "na"
}
}
}
}
console.log(nodeStatus);
var hostNames = nodeStatus["node_stats"]["hostname"];
for(var i = 0; i<hostNames.length;i++){
if(nodeStatus["node_stats"][hostNames[i]]){
eachNode = nodeStatus["node_stats"][hostNames[i]];
console.log(eachNode);
}
//nodeSum[hostNames[i]] = eachNode["mount_status"][Object.keys(eachNode["mount_status"])];
if(eachNode){
if(eachNode.hasOwnProperty("mount_status")){
if(i <= 1)
var allBins = Object.keys(eachNode["mount_status"]);
console.log('all keys',allBins);
console.log(nodeStatus["node_stats"][hostNames[i]][allBins[i]]);
console.log(Object.values(eachNode["mount_status"]));
var binStatusArray = Object.values(eachNode["mount_status"]);
nodeSum[allBins[i]] = eachNode["mount_status"][allBins[i]];
}
}
}
console.log('results',nodeSum);
}
最佳答案
您可以对每种类型的项目和属性名称使用对象查找。然后使用 Object.keys()
迭代查找的每个键和 array#reduce
每个键以及与查找属性对应的所有值,并使用 array 创建一个数组#reduce
每个对象的所有值。
var nodeStatus = { "node_stats": { "pendrive": { "mount_status": { "TEST_PROXY": "error", "TEST_TARGET": "error", "TEST_ARCHIVE": "error", "TEST_HOME": "error" } }, "minichip": { "mount_status": { "TEST_PROXY": "na", "TEST_TARGET": "na", "TEST_ARCHIVE":"na", "TEST_HOME": "na" } }, "simcard": { "mount_status":{ "TEST_HOME": "error", "TEST_TARGET": "error", "TEST_ARCHIVE": "error", "TEST_PROXY": "error" } }, "hostname": [ "nikola", "goldplus", "pendrive", "simcard", "airtel", "minichip", "voda" ], "airtel":{ "mount_status": { "TEST_PROXY": "ok", "TEST_TARGET": "ok", "TEST_ARCHIVE": "ok", "TEST_HOME": "ok" } }, "voda": { "mount_status": { "TEST_HOME": "na", "TEST_TARGET": "na", "TEST_ARCHIVE": "na", "TEST_PROXY": "na" } }, "nikola": { "mount_status": { "TEST_HOME":"na", "TEST_ARCHIVE": "na", "TEST_TARGET": "na", "TEST_PROXY": "na" } } } },
lookup = {pendrive: 'TEST_HOME', minichip: 'TEST_PROXY'}
result = Object.keys(lookup).reduce((o,k) => {
o[k] = Object.keys(nodeStatus.node_stats).reduce((r,key) => {
if('mount_status' in nodeStatus.node_stats[key])
r.push(nodeStatus.node_stats[key].mount_status[lookup[k]]);
return r;
},[]);
return o;
},{});
console.log(result);
关于javascript - 如何从给定对象以指定方式获取构造对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49284869/