首页 > 解决方案 > 有没有办法简化这个两行表达式?(解构和重组)

问题描述

这是表达式:

const { property1, property2 } = someObject;
return { property1, property2 };

基本上,我想从一个对象中提取多个属性,然后仅使用这些属性创建一个新对象。感觉好像可以用更简单的方式表达,但我没有想法。

标签: javascript

解决方案


您可以编写一个高阶函数来提取具有特定属性的对象:

const pick = (...p) => o => p.reduce((a, k) => Object.assign(a, { [k]: o[k] }), {})

// usage
const someObject = {
  property1: 'property1',
  property2: 'property2',
  property3: 'property3'
}
// function that extracts these two properties from an object
const pair = pick('property1', 'property2')

console.log(someObject)
console.log(pair(someObject))

您也可以pick()这样定义,尽管内部函数将使用与提取的键数量成比例的堆栈内存:

const pick = (...p) => o => Object.assign({}, ...p.map(k => ({ [k]: o[k] })))

// usage
const someObject = {
  property1: 'property1',
  property2: 'property2',
  property3: 'property3'
}
// function that extracts these two properties from an object
const pair = pick('property1', 'property2')

console.log(someObject)
console.log(pair(someObject))


推荐阅读