如何从对象数组中高效获取多个属性值?
最优获取键值数组中指定字段的方法
你手里的这种键值对数组,要批量获取指定字段的值,没必要写一堆else if,推荐两种高效且易维护的实现方式:
方法一:转换为对象映射(最推荐)
先把数组转成普通键值对象,之后直接通过属性名取值就行。只需要遍历一次数组,后续取值都是O(1)的操作,不管你要取5个还是10个值,都非常高效。
代码示例(TypeScript):
const customer1 = [ {"key": "name", "value": "Peter"}, {"key": "age", "value": 23}, {"key": "address", "value": "xyz St, abcd"}, {"key": "points", "value": 234} ]; // 转换为对象映射 const customerMap = Object.fromEntries( customer1.map(item => [item.key, item.value]) ) as { name: string; age: number; address: string; points: number; }; // 直接取值 const age = customerMap.age; const address = customerMap.address; const name = customerMap.name;
这种方式的优势:代码简洁,后续要加新字段只需要从customerMap里直接拿,不用修改遍历逻辑,维护成本极低,尤其适合原数组元素较多(20-40个)的场景。
方法二:仅提取目标字段
如果不想生成完整的对象映射,只想获取你需要的几个键,可以先定义目标键集合,遍历数组时只处理这些键,节省内存。
代码示例(TypeScript):
const customer1 = [ {"key": "name", "value": "Peter"}, {"key": "age", "value": 23}, {"key": "address", "value": "xyz St, abcd"}, {"key": "points", "value": 234} ]; // 定义需要获取的键 const targetKeys = new Set(['age', 'address', 'name']); const result: Partial<{name: string; age: number; address: string; points: number}> = {}; for (const item of customer1) { if (targetKeys.has(item.key)) { result[item.key as keyof typeof result] = item.value; } } // 从结果中取值 const age = result.age; const address = result.address;
这种方式适合原数组极大,但你只需要少数字段的场景,避免生成不必要的键值对。
对比你原来的写法,上面两种方法都不用写一堆else if,新增字段只需要修改目标键列表或者直接从映射中取值,代码扩展性和可读性都强很多。
内容的提问来源于stack exchange,提问作者rohit kumar
相关产品推荐
相关产品推荐

