JavaScript如何获取数组两数间区间值并按规则转换扁平化对象
数据处理逻辑实现方案
核心处理规则
- 键名映射:原数据源
Red节点映射为输出的Level字段,Blue映射为Basement字段,Black映射为Custom字段,所有节点保留原有Name属性,仅替换List为处理后结果 - 区间类节点(Red、Blue)处理:遍历List下每个双元素数字字符串区间,将字符串转为数值后,补全区间包含两个端点在内的所有连续整数,所有值收集完成后统一去重
- 普通节点(Black)处理:直接将嵌套的List数组做全层级扁平化,不做区间补全操作
可直接运行的实现代码
/** * 处理OriginalData生成符合要求的提交数据 * @param {Object} originalData 原始数据源 * @returns {Object} 处理完成的输出对象 */ function submitData(originalData) { // 节点配置:映射输出键名、标记是否需要区间补全 const nodeConfig = { Red: { targetKey: 'Level', fillRange: true }, Blue: { targetKey: 'Basement', fillRange: true }, Black: { targetKey: 'Custom', fillRange: false } } const output = {} for (const originKey in nodeConfig) { const { targetKey, fillRange } = nodeConfig[originKey] const sourceNode = originalData[originKey] let processedList = [] if (fillRange) { // 补全区间连续值 sourceNode.List.forEach(([startStr, endStr]) => { const start = Number(startStr) const end = Number(endStr) for (let val = start; val <= end; val++) { processedList.push(val) } }) // 去重 processedList = [...new Set(processedList)] } else { // 直接扁平化任意层级数组 processedList = sourceNode.List.flat(Infinity) } output[targetKey] = { Name: sourceNode.Name, List: processedList } } return output }
逻辑说明
- 区间生成逻辑自动兼容字符串格式的数字端点,比如输入区间
["10","13"]会输出10、11、12、13四个连续整数 - 去重逻辑基于
Set实现,性能优于遍历判断,不会保留重复值 - 扁平化使用
flat(Infinity),不管Black节点下的List嵌套多少层都能直接转为一维数组 - 输出结构完全匹配要求,不会残留原有的Red/Blue/Black键名
内容的提问来源于stack exchange,提问作者Sai Krishnadas
相关产品推荐
相关产品推荐

