javascript - 有没有办法简化这个两行表达式?(解构和重组)
问题描述
这是表达式:
const { property1, property2 } = someObject;
return { property1, property2 };
基本上,我想从一个对象中提取多个属性,然后仅使用这些属性创建一个新对象。感觉好像可以用更简单的方式表达,但我没有想法。
解决方案
您可以编写一个高阶函数来提取具有特定属性的对象:
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))
推荐阅读
- winapi - SystemParametersInfo SPI_GETNONCLIENTMETRICS.lfMessageFont 如何使缩放一致?
- email - 如何验证电子邮件是否存在?
- javascript - 如何从循环数组Javascript中删除和追加?
- javascript - 尝试遍历数组
- r - R - 过滤多年来保持不变的观察结果
- python - 试图理解为什么我的 tensorflow-gpu 导入语句都不起作用
- git - GIT:在你的根文件夹中使用 CRA 应用程序,我怎样才能正确推送到 git?
- openssl - 当我使用 openssl -starttls 命令连接 smtp 时,我无法停止编写电子邮件正文。(分 7)
- c# - 使用接口变量在域模型中潜在地保存不同类的对象是否合法?
- java - 如何 1) 删除 2) 使用正则表达式从 Java 字符串中获取列表项标签?