如何基于键而非索引从JavaScript对象数组中提取指定属性?
如何通过键名提取对象数组指定属性生成新数组?
你可以利用Array.prototype.map()方法结合键名访问的方式实现,完全不依赖对象属性的顺序,以下是几种实用方案:
方案1:对象解构(最简洁)
这是ES6+里最直观的写法,直接解构出需要的属性并返回新对象:
const items = [ { product: 'prodOne', quantity: 3, sending: 100, receiving: 50 }, { product: 'prodTwo', quantity: 4, sending: 50, receiving: 100 }, { product: 'prodThree', quantity: 8, sending: 100, receiving: 100 } ]; const itemsRed = items.map(({ product, quantity }) => ({ product, quantity }));
不管原对象里的属性顺序怎么调整,只要键名不变,就能正确提取目标属性。
方案2:手动创建新对象(适合新手理解)
如果对解构不太熟悉,也可以直接通过键名访问属性,手动构建新对象:
const itemsRed = items.map(item => { return { product: item.product, quantity: item.quantity }; });
逻辑直白,每一步都清晰可控,同样不依赖属性顺序。
方案3:封装通用提取函数(复用性强)
如果需要多次提取不同的属性组合,可以封装一个通用的pick函数,动态提取指定键名:
function pick(obj, keys) { const result = {}; keys.forEach(key => { result[key] = obj[key]; }); return result; } // 使用示例 const itemsRed = items.map(item => pick(item, ['product', 'quantity']));
后续需要提取其他属性时,只需要修改第二个参数的键数组即可,比如['product', 'sending'],非常灵活。
以上三种方法都能生成你需要的itemsRed数组,完全摆脱对属性索引位置的依赖。
内容的提问来源于stack exchange,提问作者Sky Lurk
相关产品推荐
相关产品推荐

