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 ;