исключить свойство объекта base на булево - PullRequest
0 голосов
/ 04 октября 2018

У меня есть функция, которая делает это

function example(senior) {
 return {
  manyotherProps: '123',
  isSenior: senior ? senior : undefined
 }
}

, но пример функции по-прежнему включает свойство isSenior, хотя оно не определено.Я могу сделать множественный возврат, но объект большой, я стараюсь избегать дублирования.

  • update: isSenior - строковое значение

Ответы [ 5 ]

0 голосов
/ 04 октября 2018

Не совсем уверен, почему вам нужно избегать неопределенного свойства, но я пробовал это, и оно работает для меня:

Опция 1: Вставить, если старший является истиной

function exam(senior) {
  var object = {
    manyotherProps: "123"
  };
  if (senior) {
    object.isSenior = senior;
  }
  return object;
}

Опция 2: Удалитьесли старший - ложь

function exam(senior) {
  var object = {
    manyotherProps: "123",
    isSenior: senior
  };
  if (!senior) {
    delete object.isSenior;
  }
  return object;
}

Надеюсь, это поможет.

0 голосов
/ 04 октября 2018

Конечно, прямого пути для достижения этой цели не существует, одним из решений будет удаление нежелательных свойств вручную.

function example(senior) {
  let res = {
    manyotherProps: '123',
    isSenior: senior ? senior : undefined
  }

  Object.keys(res).forEach(t => res[t] === undefined && delete res[t]);

  return res;
}
0 голосов
/ 04 октября 2018

Я предлагаю синтаксис отдыха / распространения объекта

function example(senior) {
  const result = {
    manyotherProps: '123'
  };
  return isSenior
    ? {senior, ...result};
    : result;
}

Иногда множественные возвраты или мутации на самом деле более ясны, но если есть только несколько условий, вышеуказанный подход является чистым и кратким

0 голосов
/ 04 октября 2018

С точки зрения производительности полезно, чтобы объект, возвращаемый вашей функцией, всегда имел одинаковую форму (со свойствами, инициализированными в одном и том же порядке).Причина в современных JIT-оптимизациях , таких как скрытые классы .Этим преимуществом пользуются не только V8, все популярные движки JS JIT используют аналогичные оптимизации. Поля

Undefined / null, как в вашем примере, не просто хороши.Они предпочтительнее.Не пытайтесь избежать дублирования.Избегайте объектов одного типа, имеющих другой порядок инициализации формы и / или свойств.

0 голосов
/ 04 октября 2018

Вы можете использовать троичный оператор для чередования объекта { isSenior } и {} и распространения результата в возвращаемом объекте:

function example(isSenior) {
 return {
  manyotherProps: '123',
  ...( isSenior ? { isSenior } : {} )
 }
}
console.log(example('foo'));
console.log(example());

Тем не менее, хотя это возможно , я думаю, что код будет более понятным для чтения, если вы позже используете if для присвоения свойству, еслинеобходимо:

function example(isSenior) {
 const obj = {
  manyotherProps: '123'
 };
 if (isSenior) obj.isSenior = isSenior;
 return obj;
}
console.log(example('foo'));
console.log(example());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...