Javascript 在JS中是否可以动态设置要分解的属性? 挑战

Javascript 在JS中是否可以动态设置要分解的属性? 挑战,javascript,Javascript,这里有两种可能的多种状态: const state1={ Url:'google.com/store' } 常量state2={ Url:'google.com/store', 链接:“yahoo.com/videos” } 下面是一个示例函数,我想以其当前形式调用它: constlogurl=({Url})=>console.log(`这是${Url}'); 但是,如果我想在这两种状态下使用此函数(我总是知道有url出现,只是不总是在哪个属性下),这允许我: 使用state1的({Url

这里有两种可能的多种状态:

const state1={
Url:'google.com/store'
}
常量state2={
Url:'google.com/store',
链接:“yahoo.com/videos”
}
下面是一个示例函数,我想以其当前形式调用它:

constlogurl=({Url})=>console.log(`这是${Url}');
但是,如果我想在这两种状态下使用此函数(我总是知道有url出现,只是不总是在哪个属性下),这允许我:

  • 使用state1的
    ({Url})
    解构函数
  • 使用state2的
    ({Link})
    解构函数
  • 没有相同函数的多个副本,只是具有不同的输入参数
  • 仍在使用JS解构
尝试 很明显,我可以用这样的方法让它工作

constlogurl=prop=>obj=>console.log(`这是${obj[prop]}`)
但这并不能满足“仍然使用JS解构”部分(许多内部API都需要)的要求

所以我想

constlogurl=prop=>({url=this[prop]})=>console.log(`这是${url}`)
但遗憾的是,这似乎不起作用


如果这是可能的,有什么想法吗?如果有,如何在JS中实现它?

您可以这样做:

const logUrl = ({ Url, Link }) => console.log(`This is the ${Link || Url}´);
当逻辑才是最重要的时候,为什么要强制执行所有这些无用的语义规则(必须使用解构),让事情变得如此艰难


作为记录,不,你不能在不使用额外逻辑的情况下动态地解构一个对象。

为什么不抓取
{Url,Link}
,看看哪一个有值?没有需要解构的API;这是一种对皮棉的偏爱——而且这并不是一种总是有意义的选择,比如当你不知道会发生什么的时候。谢谢你的评论,戴夫。您是对的,API不需要它,因为它们不能被更改,但目前大多数测试和函数库都使用({Url})的解构,我只是遇到了这样一种情况,状态中充满了更多的“链接”属性(此时两个道具都被填充),因此,我只是想知道是否有一种解决方案不需要从大多数属性中删除解构。感谢您的评论,Adam,您提到的解决方案很酷,但对于state2来说并不真正有效,因为state2中两个值都已填充(即,该州填充了更多我想选择的url属性)。我将看看我是否可以在不必对当前函数库(当前正在使用解构)进行太多更改的情况下处理解构。