【问题标题】:conditionally deconstruct object (javascript) [closed]有条件地解构对象(javascript)[关闭]
【发布时间】:2019-05-13 15:35:45
【问题描述】:

我想检查一个参数,如果它是未定义的(或假的),我将通过解构一个对象来为其赋值

function test(x){
  let obj={x:1,y:2}
  if(!x){x}=obj;
}

注意: 我不想使用临时变量

if(!x){
  let {temp}=obj;
  x=temp
}

【问题讨论】:

  • 从您的示例中不清楚您要达到的目标。您创建一个对象只是为了再次解构它。重点是什么?为什么不用这些变量创建一个对象,你就不必解构它。你从函数返回什么?对象x?您确实应该向您的问题提供更多详细信息。
  • 这个函数只是简化了,很明显它接受一个对象,但是如果没有传递参数,它会使用一个默认的
  • 请提供您的真实代码而不是抽象。为什么要在函数范围内定义obj?如前所述,目前尚不清楚您要实现的目标。

标签: javascript node.js object ecmascript-6 javascript-objects


【解决方案1】:

您不能将值重新分配给作为参数传递给函数的变量。但是,如果它是一个对象,您可以添加/修改该对象的属性。但是重新分配它会使其失去它从参数中持有的引用。在您的情况下,如果某些内容未定义,则无法更新该引用以保存值。

例如,在您的代码中 -

function test(x){
  let obj={x:1,y:2}
  x = x || obj.x
}
let x = undefined
test(x)
console.log(x)  // x is still undefined

您可以做的是保留一个对象并使用函数更新其属性

function test(a){
  let obj={x:1,y:2}
  a.x = a.x || obj.x
}
let a = {}
test(a)
console.log(a.x)  // a.x equals to 1 now

【讨论】:

  • 谢谢,我用了 if(!x) x=obj.x
【解决方案2】:

如果未定义或为假,您的意思是分配一个默认值吗?

x = x || {};

【讨论】:

  • 不,我的意思是如果没有传递参数,我想解构默认对象
【解决方案3】:

在函数中覆盖 x 值并像下面的代码一样返回它

function test(x){
   let obj={x:1,y:2}
   if(!x)x=obj;
   if(x.hasOwnProperty('x')){
   return x.x;
   }
   else{
    return "object does not have property x";
}
}
console.log(test(undefined));    //  {x:1,y:2}
console.log(test(false));    //  {x:1,y:2}
console.log(test(true));    //  true

【讨论】:

  • 我想解构对象,所以我得到 x whitch 的值在里面
  • 这里如果 x 未定义或为 false 则将对象分配给函数中的 x,否则它将返回 x 的初始值是你想要的吗?
猜你喜欢
  • 2020-06-16
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多