Javascript 自动将对象键扩展到变量

Javascript 自动将对象键扩展到变量,javascript,function,object,variables,assign,Javascript,Function,Object,Variables,Assign,我有一个带有一系列键/值对的对象。我想把它们都像这样展开: const { filterTarget, filter, source, minDate, maxDate, skip, limit, tracking, trackingList, sortBy, sortOrder } = req.body; 有没有一种更快的方法让我做到这一点,这样我就不必写所有的属性名,而是可以自动地将它们展开

我有一个带有一系列键/值对的对象。我想把它们都像这样展开:

const { 
    filterTarget, 
    filter, 
    source, 
    minDate,
    maxDate, 
    skip, 
    limit,
    tracking,
    trackingList,
    sortBy,
    sortOrder
} = req.body;
有没有一种更快的方法让我做到这一点,这样我就不必写所有的属性名,而是可以自动地将它们展开?比如:

SOMETHING_THAT_ASSIGNS_KEYS_TO_CONSTANTS = req.body;

最后,我需要相同的结果,但如果不是完全必要的话,我不想写出所有变量。

如果不将属性指定给窗口对象,就不能这样做,这是应该避免的:

常量对象={ filterTarget:filterTarget值, 过滤器:过滤器值, 来源:来源值 }; Object.entriesobj.forEach[k,v]=>window[k]=v;
日志'filterTarget:',filterTarget 不可能在范围级别动态创建常量,但可以使用以下方法在对象级别创建常量:

“严格使用” 函数createConstantssource{ const result={}; 对于Object.entriessource的常量[key,value]{ Object.definePropertyresult,键{ 价值:价值, 可枚举:正确, 对,, 可写:false }; } 返回结果; } 常数a=createConstants{ 过滤目标:42, 过滤器:43, 资料来源:44, }; console.loga; //以“严格”模式抛出,因为的成员是常量
a、 来源=0;您必须定义这些变量才能在范围内使用它们!解构只是给变量赋值,你想要什么?把它们复制到另一个物体上?让cpy={…req.obj}您可以执行const b=req.body;,然后使用b.filterTarget等。我的答案似乎只是ES5中@Taki答案的一个副本。忽略这一点:很抱歉打扰您。我知道您提出了一个警告,应该避免使用窗口版本,但让我说明一下为什么这是一个坏主意。假设您收到对象{a:1,b:2}。然后应用这项技术,你可以做c=a+b,这样就可以得到x=3。但是,您沿直线更改对象的形状,它现在是{x:1,b:2},这意味着a不再存在。最明智的代码分析工具或仅仅阅读代码不会发现问题,因此看起来很安全,但是行c=a+b现在会抛出ReferenceError:a未定义另一个问题是,例如,获取对象{atob:1}-它看起来很无辜,但会覆盖全局函数。几个月后,当你真的需要使用它的时候,它可能会回来咬你,但却神秘地不起作用。其他任何内容也可能被覆盖,比如日期或数组,这也会影响任何代码的工作方式。您可能会完全意外地破坏第三方库,并且永远不会知道,直到为时已晚。@VLAZ我同意,这是一个非常好的细化,请随意编辑答案以添加更多细节和解释