JavaScript如何基于原数组提取指定字段生成新数组?
数组清洗实现方案
核心实现思路:先定义需要保留的字段白名单,通过双层for循环遍历原始数组和白名单字段,仅提取目标字段即可,不受原始对象额外字段的影响。
代码实现
首先定义保留字段常量:
// 定义需要保留的字段白名单 const ALLOWED_FIELDS = ['Cpf', 'Nascimento', 'Sexo', 'Id', 'Nome', 'Ativo', 'Criacao', 'UltimaAlteracao', 'Email', 'Observacoes', 'Endereco']
for循环版本的清洗函数:
function cleanSelectedData(rawSelectedArray) { const result = [] // 遍历原始选中数组的每一项 for (let i = 0; i < rawSelectedArray.length; i++) { const rawItem = rawSelectedArray[i] const cleanedItem = {} // 仅提取白名单内的字段 for (let k = 0; k < ALLOWED_FIELDS.length; k++) { const field = ALLOWED_FIELDS[k] cleanedItem[field] = rawItem[field] } result.push(cleanedItem) } return result }
使用说明
每次选中/取消复选框更新完原始选中数组后,调用cleanSelectedData函数传入原始数组,返回的结果就是仅包含目标字段的清洗后数组,可直接用于CSV导出。
如果后续需要调整保留的字段,仅需修改ALLOWED_FIELDS数组即可,无需改动核心逻辑。
CSV导出适配补充
因为Endereco是嵌套对象,直接导出CSV会出现结构异常,如果你需要把地址字段展开为平级字段,可以修改清洗逻辑如下:
// 调整后的白名单,包含地址下的字段 const ALLOWED_FIELDS = ['Cpf', 'Nascimento', 'Sexo', 'Id', 'Nome', 'Ativo', 'Criacao', 'UltimaAlteracao', 'Email', 'Observacoes', 'Cep', 'Logradouro', 'Numero', 'Complemento', 'Bairro', 'Estado', 'Cidade'] function cleanSelectedData(rawSelectedArray) { const result = [] const addressFields = ['Cep', 'Logradouro', 'Numero', 'Complemento', 'Bairro', 'Estado', 'Cidade'] for (let i = 0; i < rawSelectedArray.length; i++) { const rawItem = rawSelectedArray[i] const cleanedItem = {} for (let k = 0; k < ALLOWED_FIELDS.length; k++) { const field = ALLOWED_FIELDS[k] if (addressFields.includes(field)) { cleanedItem[field] = rawItem.Endereco?.[field] ?? null } else { cleanedItem[field] = rawItem[field] } } result.push(cleanedItem) } return result }
内容的提问来源于stack exchange,提问作者Veterano
相关产品推荐
相关产品推荐

