条件参数添加到对象 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));