Клонирование объекта javascript без одного свойства

Каков наилучший способ в JavaScript для возврата объекта без одного или нескольких свойств?

Я могу назначить ключ на undefined, и это точно сработает, но что, если я хочу полностью избавиться от этого ключа?

function removeCKey() {
  const obj = {a: 'a', b: 'b', c: 'c'}
  return {
    ...obj,
    c: undefined,
  };
}

const myObj = removeCKey();

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

function removeCKey() {
  const obj = {a: 'a', b: 'b', c: 'c'}
  const {c, ...rest} = newObj

  return rest;
}

const myObj = removeCKey();

Мутация объекта или создание копии?

Yury Tarabanko 19.03.2019 15:57

Вы можете delete obj.c.

Sergiu Paraschiv 19.03.2019 15:57

Это прекрасно работает @SergiuParaschiv, но что, если мне нужно удалить много ключей?

Andrea Zornada 19.03.2019 16:00

К вашему сведению, оператор удалить

crashmstr 19.03.2019 16:00

Разрушение: const { c, ...result } = obj; return result;

Tyler Roper 19.03.2019 16:00

Вы составляете список ключей и delete obj[k], где k — каждое значение в списке.

Sergiu Paraschiv 19.03.2019 16:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
6
69
2

Ответы 2

Только delete то, что вам не нужно:

function omit(obj, keys) {
  const newObj = { ...obj };  // shallow copy...
  keys.forEach(key => {
    delete newObj[key];  // ... and `delete`.
  });
  return newObj;
}

omit({a: 'a', b: 'b', c: 'c'}, ['c']);

выходы

{ a: 'a', b: 'b' }

Вы можете использовать ES6 назначение деструктуризации объекта.

function removeKeys() {
  const obj = {
    a: 'a',
    b: 'b',
    c: 'c'
  };

  // extract property c in variable c
  // and rest of the value into res 
  let { c, ...res } = obj;

  return res;
}

console.info(removeKeys())

Другие вопросы по теме