如何从给定对象中以指定方式获取构造对象 [英] how to get construct object in specified manner from given object
问题描述
我在构造所需格式的object
时遇到问题.
i have problem in constructing a object
in desired format.
我想以这种方式获取对象
i want to get the object in this manner
{"pendrive":['went to each object and picked "TEST_HOME" value'],"minichip":['went to each object and picked "TEST_PROXY" value']}
必须从每个object
中收集上述array
的值,方法是转到mount_status
然后是key
,例如示例 TEST_PROXY
,TEST_HOME
,TEST_ARCHIVE
,TEST_TARGET
the value of the above array
must be collected from each object
by going to mount_status
then key
, for example 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
遍历每个键与对应于lookup属性的所有值,并使用每个对象的所有值的array#reduce
创建一个数组.
You can use an object lookup for each type of item and property name. Then Using Object.keys()
iterate through each key of lookup and array#reduce
each key with all the values corresponding to lookup property and create an array using array#reduce
of all the values of each object.
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);
这篇关于如何从给定对象中以指定方式获取构造对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!