Javascript 仅当对象未定义时才将属性添加到该对象

Javascript 仅当对象未定义时才将属性添加到该对象,javascript,angular,Javascript,Angular,我的目标如下: let params = { limit: limit, offset: 15, status: "completed", product_id: this.route.snapshot.queryParams.product_id, }; 上面的对象包含过滤我的数据源的参数 this.route.snapshot.queryParams.product\u i

我的目标如下:

   let params = {
            limit: limit,
            offset: 15,
            status: "completed",
            product_id: this.route.snapshot.queryParams.product_id,
        };
上面的对象包含过滤我的数据源的参数

this.route.snapshot.queryParams.product\u id
是一个查询/获取参数

?产品标识=123

但是,如果该值不存在,则该值未定义。因此,如果未定义此值,我不想将
product\u id
成员添加到parameters对象

如果未定义该对象,则该对象应如下所示:

   let params = {
            limit: limit,
            offset: 15,
            status: "completed",
        };

我不认为你能在线完成,但是

let params:object;
if ( this.route.snapshot.queryParams.product_id){
    params = {
            limit: limit,
            offset: 15,
            status: "completed",
            product_id: this.route.snapshot.queryParams.product_id,
        };
        }
else{
    params = {
            limit: limit,
            offset: 15,
            status: "completed",
        };  
}

将完成此任务。

您可以通过如下所示的对象分解来完成此任务

var param = {
            limit: 5,
            offset: 15,
            status: "completed",
            product_id: undefined,
        };
var { product_id, ...rest } = param

param = { ...(product_id && { product_id }), ...rest }

当我在过去做过这件事时,我使用了类似于下面例子的东西。我觉得可能有更好的方法,但我还没有找到

const removeUndefinedValues=objectIn=>Object.keys(objectIn)
.减少((上一个,当前)=>{
返回对象[curr]!==未定义?
{
…上一页,
[货币]:反对[货币]
}:上
}, {})
设paramsOne={
上限:0,
抵销:15,
状态:“已完成”,
产品标识:未定义,
}
设paramsTwo={
上限:0,
抵销:15,
状态:“已完成”,
产品标识:“A值”,
}
console.dir(删除未定义的值(paramsOne))

console.dir(removeUndefinedValues(paramsTwo))
我个人认为应该让
product\u id
未定义,然后检查它是否稍后会出现,但您可以执行以下操作:

let params = {
  limit: limit,
  offset: 15,
  status: "completed",
};

if(this.route.snapshot.queryParams.product_id) {
  params['product_id'] = this.route.snapshot.queryParams.product_id;
}

仅当产品标识未定义时添加产品标识

let params = {
        limit: limit,
        offset: 15,
        status: "completed",
    };

if(this.route.snapshot.queryParams.product_id)
   params['product_id'] = this.route.snapshot.queryParams.product_id;
试试这个

  const product_id = this.route.snapshot.queryParams.product_id;

  let params = Object.assign({
            limit: limit,
            offset: 15,
            status: "completed"
        }, product_id ? {product_id} : {});
你对以下几点有什么看法


有很多方法可以实现这一点。我将指出其中两个。 您可以简单地使用if语句添加
product\u id
字段

let product_id = this.route.snapshot.queryParams.product_id;
if(product_id) {
    params.product_id = product_id;
}

您可以使用拆分运算符

let product_id = this.route.snapshot.queryParams.product_id;
let params = {
    limit: limit,
    offset: 15,
    status: "completed",
    ...product_id ? {product_id} : {},
};

这应该可以完成以下工作:

let params = {
        limit: limit,
        offset: 15,
        status: "completed",
    };

if (this.route.snapshot.queryParams.product_id) {
   params["product_id"] = this.route.snapshot.queryParams.product_id
}
内联解决方案:

let params = {
  limit: limit,
  offset: 15,
  status: "completed",
  ...this.route.snapshot.queryParams.product_id && {product_id: this.route.snapshot.queryParams.product_id},
};
或更短:

const product_id = this.route.snapshot.queryParams.product_id
let params = {
  limit: limit,
  offset: 15,
  status: "completed",
  ...product_id && {product_id},
};

如何构造包含3个成员的params对象,然后根据条件进行追加

let params = {
  limit: limit,
  offset: 15,
  status: "completed",
};
var value = this.route.snapshot.queryParams.product_id;
if (value) {
  params.product_id = value
}
您也可以尝试:

let param = { product_id:this.route.snapshot.queryParams.product_id }
params = this.route.snapshot.queryParams.product_id ? {...params, ...param} : params ;

我与Angular合作,所以我更喜欢这个es6解决方案。谢谢。我一直希望能找到这样的东西,很好
let param = { product_id:this.route.snapshot.queryParams.product_id }
params = this.route.snapshot.queryParams.product_id ? {...params, ...param} : params ;