本文介绍如何基于一个键名数组,从对象数组中精准筛选并保留指定属性,生成结构精简的新数组,避免嵌套或错误的展开方式。
在实际开发中,我们常需从后端返回的“宽表”对象(即包含大量可选/冗余字段的对象)中,按需提取特定字段,形成轻量、语义明确的数据子集。例如,数据库返回每位用户所有颜色字段(yellow, blue, pink, red等),但业务层仅需展示用户姓名及用户配置的若干颜色(如 [‘yellow’, ‘blue’])。此时,若直接使用 map + spread 组合不当(如将 colors.map() 结果解构为数组再展开),会导致意外生成索引键(如 0, 1)而非目标属性名——这正是原问题中出现 {0: {yellow: …}, 1: {blue: …}} 的根本原因。
正确做法是:对每个原始对象,显式构造新对象,并逐个注入所需键值对。以下是两种推荐实现: