Условное добавление параметра к объекту Javascript - PullRequest
0 голосов
/ 15 апреля 2020

Ниже приведен мой код, в котором я пытаюсь добавить passStatus к объекту, только если у него есть значение, в противном случае его опустить.

Я пробовал этот - В Javascript, как условно добавить член к объекту?

Но похоже, что я делаю это неправильно. Любые указатели Пожалуйста.

Код -

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"
}

Ответы [ 3 ]

4 голосов
/ 15 апреля 2020

Удалите объект (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);
1 голос
/ 15 апреля 2020

Полное копирование всего объекта, если новый объект имеет значение Falsey 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));
1 голос
/ 15 апреля 2020

Я думаю, что самый простой способ условно удалить свойство из объекта, как это, было бы использовать синтаксис 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);
...