JS多数组动态关联与过滤的实现需求
前端复杂数据处理方案
输入数据
三个JavaScript数组如下,其中Values数组的布尔值每5秒会动态切换:
Config数组
存储各rdd对应的配置项开关:
var Config = [{ "rdd": "Transducer Failure", "performance": true, "agc": false, "snr": true, "sos": false, "flowvel": true }, { "rdd": "Detection Problem", "performance": false, "agc": true, "snr": false, "sos": true, "flowvel": false } ]
Instance数组
包含不同实例(如U、Y)的配置项映射值:
var Instance = [{ "U": [{ "performance": "abc", "agc": "xyz", "snr": "pqr", "sos": "vns", "flowvel": "mns" }], "Y": [{ "performance": "a", "agc": "b", "snr": "c", "sos": "d", "flowvel": "e" }] }]
Values数组
存储映射值对应的布尔状态,每5秒动态更新:
var Values = [{ "abc": true, "xyz": false, "pqr": true, "vns": false, "mns": true, "a": true, "b": false, "c": false, "d": true, "e": true }]
需求说明
生成满足以下条件的新对象数组:
- 若
Config中某配置项值为true,则先映射到Instance对应实例的取值,再获取Values中该取值的布尔值;若Config中值为false,则返回"NA" - 最终结果按实例分组,每个实例下包含对应各
rdd的配置项状态或NA
期望输出:
result = [{ "U": [{ "rdd": "Transducer Failure", "performance": true, "agc": "NA", "snr": true, "sos": "NA", "flowvel": true }, { "rdd": "Detection Problem", "performance": "NA", "agc": false, "snr": "NA", "sos": false, "flowvel": "NA" } ], "Y": [{ "rdd": "Transducer Failure", "performance": true, "agc": "NA", "snr": false, "sos": "NA", "flowvel": true }, { "rdd": "Detection Problem", "performance": "NA", "agc": false, "snr": "NA", "sos": true, "flowvel": "NA" } ] }]
实现代码
function generateResult() { const instanceMap = Instance[0]; const valueMap = Values[0]; const result = {}; Object.keys(instanceMap).forEach(instanceKey => { const instanceConfig = instanceMap[instanceKey][0]; result[instanceKey] = Config.map(rddItem => { const rddResult = { rdd: rddItem.rdd }; Object.keys(rddItem).forEach(key => { if (key === 'rdd') return; rddResult[key] = rddItem[key] ? valueMap[instanceConfig[key]] : "NA"; }); return rddResult; }); }); return [result]; } // 首次生成结果 let currentResult = generateResult(); console.log(currentResult);
动态更新处理
适配Values每5秒的状态切换,定时重新生成结果:
// 每5秒更新一次结果 setInterval(() => { currentResult = generateResult(); // 此处可添加UI更新逻辑,比如渲染最新结果 console.log('Updated Result:', currentResult); }, 5000);
代码说明
- 先从
Instance和Values中提取实际映射对象(两者均为数组包裹的单个对象) - 遍历每个实例(U、Y),为每个实例生成对应的rdd结果列表
- 对每个rdd项,遍历配置字段:
- 开关为
true时,通过Instance的映射值获取Values中的布尔状态 - 开关为
false时,直接赋值"NA"
- 开关为
- 将结果包裹成数组,匹配期望输出格式
- 使用
setInterval实现每5秒重新计算结果,适配Values的动态变化
内容的提问来源于stack exchange,提问作者Abhinav
相关产品推荐
相关产品推荐

