javascript - JS中是否可以动态设置要解构的属性?
问题描述
挑战
这是许多可能的两种状态:
const state1 = {
Url: 'google.com/store'
}
const state2 = {
Url: 'google.com/store',
Link: 'yahoo.com/videos'
}
这是我想以其当前形式调用的示例函数:
const logUrl = ({ Url }) => console.log(`This is the ${Url}´);
但是,如果我想在两种状态下都使用这个函数(我总是知道会有一个 url,但并不总是在哪个属性下),这允许我:
({ Url })
用for state1解构函数- 用
({ Link })
for state2解构函数 - 没有相同功能的多个副本,只是具有不同的输入参数
- 仍在使用 JS 解构
尝试
我显然可以使用类似的东西让它工作
const logUrl = prop => obj => console.log(`This is the ${obj[prop]}`)
但这并不能满足“仍在使用 JS 解构”部分(许多内部 API 都需要)。
所以我虽然关于
const logUrl = prop => ({ url = this[prop] }) => console.log(`This is the ${url}`)
但遗憾的是,这似乎不起作用。
任何想法,如果这是可能的,如果是这样,如何在 JS 中做到这一点?
解决方案
你可以这样做:
const logUrl = ({ Url, Link }) => console.log(`This is the ${Link || Url}´);
当逻辑很重要时,为什么要强制执行所有这些无用的语义规则(必须使用解构),让自己变得如此困难?
为了记录,不,您不能在不使用其他逻辑的情况下动态解构对象。
推荐阅读
- swift - 导致“中止:陷阱 6 错误代码”的函数体
- java - 在 Spring Data Rest v3.x 的 PersistentEntityResourceHandlerMethodArgumentResolver 中找不到自定义转换器
- c++ - 如何创建不同大小的子对象数组
- ios - 一旦我在颤动中更新了 Firebase 插件,我的应用程序就会抛出错误
- sql - 组合已知查询
- sql-server - 从字符串转换日期和/或时间时转换为日期然后转换失败
- reactjs - 运行 cypress 测试时 axios http 请求中缺少 cookie
- google-colaboratory - 使用pickle加载文件
- azure - AADSTS65001 invalid_grant 当所有权限都得到管理员同意时
- ios - Ionic App 在模拟的 iOS 手机中不起作用