首页 > 解决方案 > 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,但并不总是在哪个属性下),这允许我:

尝试

我显然可以使用类似的东西让它工作

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 中做到这一点?

标签: javascript

解决方案


你可以这样做:

const logUrl = ({ Url, Link }) => console.log(`This is the ${Link || Url}´);

当逻辑很重要时,为什么要强制执行所有这些无用的语义规则(必须使用解构),让自己变得如此困难?

为了记录,不,您不能在不使用其他逻辑的情况下动态解构对象。


推荐阅读