如何从给定对象按指定规则构造目标格式的对象?
解决从mount_status字段构造目标对象的问题
嘿,我来帮你搞定这个从mount_status字段提取数据构造目标对象的问题!根据你给出的规则,我会用JavaScript(最常见的对象处理场景)来给出具体的实现方案,你可以根据自己使用的语言调整逻辑。
核心思路
我们需要遍历mount_status下的每个目标key(比如TEST_PROXY、TEST_HOME等),提取对应key里的pendrive数组,然后生成以该key为键、值为包含pendrive数组的对象(或者单独生成每个key对应的对象)。
假设的原始数据结构
首先我先假设你的原始输入数据结构是这样的(你可以替换成自己的实际数据):
const inputData = { mount_status: { TEST_PROXY: { pendrive: ["ok", "ok", "na", "error", "error", "na"] }, TEST_HOME: { pendrive: ["error", "na", "error", "ok", "na", "na"] }, TEST_ARCHIVE: { pendrive: ["na", "ok", "ok", "na", "error", "ok"] }, TEST_TARGET: { pendrive: ["error", "na", "ok", "ok", "na", "error"] } } };
方案1:生成包含所有key的目标对象
如果你需要把所有TEST_*key都整合到一个目标对象里,可以用Object.entries和reduce来实现:
const buildTargetObject = (data) => { // 先把mount_status转换成[key, value]的键值对数组 const mountEntries = Object.entries(data.mount_status); // 遍历累加生成目标对象 return mountEntries.reduce((result, [currentKey, currentValue]) => { // 给每个key赋值对应的pendrive对象 result[currentKey] = { pendrive: currentValue.pendrive }; return result; }, {}); }; // 调用函数得到结果 const fullTargetObject = buildTargetObject(inputData); console.log(fullTargetObject);
运行后你会得到这样的输出:
{ TEST_PROXY: { pendrive: ["ok", "ok", "na", "error", "error", "na"] }, TEST_HOME: { pendrive: ["error", "na", "error", "ok", "na", "na"] }, TEST_ARCHIVE: { pendrive: ["na", "ok", "ok", "na", "error", "ok"] }, TEST_TARGET: { pendrive: ["error", "na", "ok", "ok", "na", "error"] } }
方案2:单独生成某个key的目标对象
如果你只需要单独提取某个key(比如TEST_HOME)对应的对象,可以用这个函数:
const getSingleKeyTarget = (data, targetKey) => { // 先判断key是否存在,避免报错 if (!data.mount_status?.[targetKey]?.pendrive) { console.warn(`key ${targetKey} 或 pendrive字段不存在`); return null; } return { pendrive: data.mount_status[targetKey].pendrive }; }; // 提取TEST_HOME的对象 const testHomeObject = getSingleKeyTarget(inputData, "TEST_HOME"); console.log(testHomeObject); // 输出:{"pendrive":["error","na","error","ok","na","na"]}
注意事项
- 如果你的原始数据里
pendrive的路径不是直接在mount_status[key]下,只需要调整代码里currentValue.pendrive的部分即可(比如如果是currentValue.device.pendrive,就改成对应的路径) - 加了可选链操作符
?.和判断逻辑,避免因为某个key或字段缺失导致代码报错
内容的提问来源于stack exchange,提问作者user5405873
相关产品推荐
相关产品推荐

