Nano Hash - криптовалюты, майнинг, программирование

Неглубокий объект копирования, оставляющий одно или несколько свойств в ES6/ES7?

Вот как я это делал:

var props = { id: 1, name: 'test', children: [] }

//copy props but leave children out
var newProps = { ...props }
delete newProps.children

console.log(newProps) // { id: 1, name: 'test' }

Есть ли более чистый и простой способ?


  • Я не понимаю. Вы не написали самую важную строку, где копируете props в newProps. Что...? 29.01.2016
  • @ william.taylor.09, не дублировать. Он умеет копировать (просто не показывает эту строчку), но хочет скопировать все свойства, кроме некоторых в черный список 29.01.2016
  • @Gavriel, разве эта строка в основном не копирует свойства нового объекта var newProps = { ...props }? Вроде как делаю var newProps = Object.assign({}, props) 29.01.2016
  • Выдает ошибку: Uncaught SyntaxError: Unexpected token. Я не понимаю, вы сказали: вот как я это делаю, я думал, что у вас есть рабочая версия, и вы ищете более приятный способ сделать это. Однако я разместил один из возможных способов ниже 29.01.2016
  • @Gavriel, это оператор спреда: babeljs.io/repl/ 29.01.2016
  • ах, я пропустил тег babeljs, sebaj :) 29.01.2016
  • @ Берги, это не дубликат. Другой вопрос комплементатор вот этого: там хочет копировать по вайт-листу, а тут по блек-листу 29.01.2016
  • @Gavriel: Ах, верно, хотя белый список определенно чище. 29.01.2016
  • Я бы сказал более безопасный, но чистота зависит от многих вещей. Если у меня есть 20 свойств и я не хочу 2 из них, то черный список наверняка будет чище и читабельнее. 29.01.2016

Ответы:


1

Вы можете использовать назначение деструктурирования:

var props = { id: 1, name: 'test', children: [] }

var {children:_, ...newProps} = props;
console.log(newProps) // { id: 1, name: 'test' }
console.log(_) // [] - as an "empty" placeholder

(с тем же предложением свойств rest/spread для ES7, которое вы уже использовали)

28.01.2016
  • Да, я думаю, что это лучший вариант - я делал что-то подобное раньше. Я просто хочу, чтобы было что-то более явное... 29.01.2016
  • Я думаю, что это уже довольно явно... Если хотите, вы можете написать функцию с подходящим названием (key, {[key]:_, ...rest}) => rest и вызвать ее. 30.01.2016
  • /* eslint no-unused-vars: ["error", { "varsIgnorePattern": "_"] */ Полезен для избавления от ошибок eslint при использовании этой техники 14.05.2017
  • Спасибо за ответ. Это помогло. Но я должен согласиться с @EvanHobbs - я ожидал, что у меня будет гораздо более интуитивный способ сделать это. 02.11.2017

  • 2
  • Спасибо @gavriel. Да, если на то пошло, я думаю, я мог бы обернуть свою логику в функцию клонирования. Я просто надеялся, что есть более лаконичный способ. 29.01.2016
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..