如何动态更新对象数组的键,使其匹配headers字符串数组的对应取值
动态更新对象数组键名的实现方法
核心实现逻辑是遍历rows数组的每一项,将对象值与headers数组的键名按顺序配对,生成新的对象即可,无需硬编码键名。
基础实现方案
适用于原有对象键(column1~column4)按固定顺序定义的场景:
const headers = ['col1', 'col2', 'col3', 'col4'] const rows = [ { column1: 'value1', column2: 'value2', column3: 'value3', column4: 'value4' }, { column1: 'value5', column2: 'value6', column3: 'value7', column4: 'value8' } ]; const result = rows.map(row => { // 按顺序取出当前行所有属性值 const rowValues = Object.values(row); // 配对headers的新键名生成新对象 return headers.reduce((newRow, key, index) => { newRow[key] = rowValues[index]; return newRow; }, {}); }); console.log(result) // 输出即为你需要的结果
兼容键顺序不确定的方案
如果原有对象的键排列顺序可能混乱,可以先对键按数字后缀排序后再取值:
const result = rows.map(row => { // 对原有键按后缀数字排序,保证取值顺序为column1 -> column2 -> column3 -> column4 const sortedOldKeys = Object.keys(row).sort((a, b) => { return Number(a.replace('column', '')) - Number(b.replace('column', '')) }); const rowValues = sortedOldKeys.map(key => row[key]); return headers.reduce((newRow, key, index) => { newRow[key] = rowValues[index]; return newRow; }, {}); });
内容的提问来源于stack exchange,提问作者Milan
相关产品推荐
相关产品推荐

