条件参数添加到对象 Javascript
Conditional Parameter addition to an Object Javascript
以下是我的代码,其中我试图将 passStatus
添加到一个对象,只有当它有一个值时才会忽略它。
我试过这个 - In Javascript, how to conditionally add a member to an object?
但我好像做错了。任何指针请。
代码-
var a = {
firstName: "Tom",
lastName: "Simmon",
email: "tomsimmon@gail.com",
phone: "+36456",
passStatus: "",
query: "simple"
};
// var newObj = Object.assign(a, a.passStatus ? {a.passStatus} : null);
var newObj = {
...(a.passStatus? {passStatus: a.passStatus}: {} )
}
console.log(newObj); // {} <- Getting a blank object
预期输出 -
If passStatus = ""
{
firstName: "Tom",
lastName: "Simmon",
email: "tomsimmon@gail.com",
phone: "+36456",
query: "simple"
}
If passStatus = "pass"
{
firstName: "Tom",
lastName: "Simmon",
email: "tomsimmon@gail.com",
phone: "+36456",
passStatus: "pass",
query: "simple"
}
我认为像这样有条件地从对象中删除 属性 的最清晰方法是使用 rest 语法,后跟可能的 Object.assign
:
var a = {
firstName: "Tom",
lastName: "Simmon",
email: "tomsimmon@gail.com",
phone: "+36456",
passStatus: "",
query: "simple"
};
const { passStatus, ...newObj } = a;
if (passStatus) {
Object.assign(newObj, { passStatus });
}
console.log(newObj);
您可以通过解构计算的 属性 名称在一行中完成此操作,其中 属性 名称使用条件运算符删除 passStatus
属性 如果它存在 - 但这很难理解,我不推荐它:
var a = {
firstName: "Tom",
lastName: "Simmon",
email: "tomsimmon@gail.com",
phone: "+36456",
passStatus: "",
query: "simple"
};
const { [a.passStatus ? '' : 'passStatus']: _, ...newObj } = a;
console.log(newObj);
解构对象 (a
) 以删除值,而不是使用对象传播来添加它,如果它是真实的:
var a = {
firstName: "Tom",
lastName: "Simmon",
email: "tomsimmon@gail.com",
phone: "+36456",
query: "simple"
};
const { passStatus, ...obj } = a;
const newObj = {
...obj,
...(passStatus && { passStatus })
};
console.log(newObj);
浅拷贝整个对象,如果新对象有一个假的passStatus
值,删除属性.
const a = {
firstName: "Tom",
lastName: "Simmon",
email: "tomsimmon@gail.com",
phone: "+36456",
passStatus: "",
query: "simple"
};
const b = {
firstName: "Tom",
lastName: "Simmon",
email: "tomsimmon@gail.com",
phone: "+36456",
passStatus: "test",
query: "simple"
};
const copyKeepOrRemovePassStatus = obj => {
const newObj = { ...obj };
if (!newObj.passStatus) {
delete newObj.passStatus;
}
return newObj;
};
console.log(copyKeepOrRemovePassStatus(a));
console.log(copyKeepOrRemovePassStatus(b));
以下是我的代码,其中我试图将 passStatus
添加到一个对象,只有当它有一个值时才会忽略它。
我试过这个 - In Javascript, how to conditionally add a member to an object?
但我好像做错了。任何指针请。
代码-
var a = {
firstName: "Tom",
lastName: "Simmon",
email: "tomsimmon@gail.com",
phone: "+36456",
passStatus: "",
query: "simple"
};
// var newObj = Object.assign(a, a.passStatus ? {a.passStatus} : null);
var newObj = {
...(a.passStatus? {passStatus: a.passStatus}: {} )
}
console.log(newObj); // {} <- Getting a blank object
预期输出 -
If passStatus = ""
{
firstName: "Tom",
lastName: "Simmon",
email: "tomsimmon@gail.com",
phone: "+36456",
query: "simple"
}
If passStatus = "pass"
{
firstName: "Tom",
lastName: "Simmon",
email: "tomsimmon@gail.com",
phone: "+36456",
passStatus: "pass",
query: "simple"
}
我认为像这样有条件地从对象中删除 属性 的最清晰方法是使用 rest 语法,后跟可能的 Object.assign
:
var a = {
firstName: "Tom",
lastName: "Simmon",
email: "tomsimmon@gail.com",
phone: "+36456",
passStatus: "",
query: "simple"
};
const { passStatus, ...newObj } = a;
if (passStatus) {
Object.assign(newObj, { passStatus });
}
console.log(newObj);
您可以通过解构计算的 属性 名称在一行中完成此操作,其中 属性 名称使用条件运算符删除 passStatus
属性 如果它存在 - 但这很难理解,我不推荐它:
var a = {
firstName: "Tom",
lastName: "Simmon",
email: "tomsimmon@gail.com",
phone: "+36456",
passStatus: "",
query: "simple"
};
const { [a.passStatus ? '' : 'passStatus']: _, ...newObj } = a;
console.log(newObj);
解构对象 (a
) 以删除值,而不是使用对象传播来添加它,如果它是真实的:
var a = {
firstName: "Tom",
lastName: "Simmon",
email: "tomsimmon@gail.com",
phone: "+36456",
query: "simple"
};
const { passStatus, ...obj } = a;
const newObj = {
...obj,
...(passStatus && { passStatus })
};
console.log(newObj);
浅拷贝整个对象,如果新对象有一个假的passStatus
值,删除属性.
const a = {
firstName: "Tom",
lastName: "Simmon",
email: "tomsimmon@gail.com",
phone: "+36456",
passStatus: "",
query: "simple"
};
const b = {
firstName: "Tom",
lastName: "Simmon",
email: "tomsimmon@gail.com",
phone: "+36456",
passStatus: "test",
query: "simple"
};
const copyKeepOrRemovePassStatus = obj => {
const newObj = { ...obj };
if (!newObj.passStatus) {
delete newObj.passStatus;
}
return newObj;
};
console.log(copyKeepOrRemovePassStatus(a));
console.log(copyKeepOrRemovePassStatus(b));