Перемещение по объектам.

Вы когда-нибудь хотели выполнить цикл над объектом и изменить все его значения? Например, когда вы создаете приложение react с состоянием и у вас есть несколько входов. А может быть, вы хотите очистить все состояние с помощью кнопки clear? Позвольте мне показать вам один способ, о котором я узнал от замечательного Уэса Боса.

Я буду показывать это на ванильном JS.

Во-первых, давайте создадим объект

const product1 = {
   name: 'Giant Sour Gummy Worm',
   price: 35.00,
   description: 'A giant gummy worm coated with sour powder and waiting to be eaten!',
   image: 'https://images.vat19.com/worlds-largest-sour-gummy-worm/worlds-largest-gummy-worm-sour-flavor-1.jpg',
   availability: 'FOR_SALE',
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь, когда у нас есть объект, нам нужно сделать цикл по нему, изменив его на массив. Используя Object.entries()

Object.entries(product1)
Вход в полноэкранный режим Выход из полноэкранного режима

Если мы console.log(), то получим что-то вроде этого.

[
  [ 'name', 'Giant Sour Gummy Worm' ],
  [ 'price', 35 ],
  [
    'description',
    'A giant gummy worm dunked in sour powder and waiting to be eaten!'
  ],
  [
    'image',
    'https://images.vat19.com/worlds-largest-sour-gummy-worm/worlds-largest-gummy-worm-sour-flavor-1.jpg'
  ],
  [ 'availability', 'FOR_SALE' ]
]
Вход в полноэкранный режим Выход из полноэкранного режима

Видите, как в каждом массиве есть два элемента? Первый — это ключ, а второй — значение!

Теперь, если мы просто map() над массивом, мы можем изменить все значения внутреннего массива.

const mappedProduct = Object.entries(
    product1
    ).map(([key, value]) => [key, ''])
Вход в полноэкранный режим Выход из полноэкранного режима

Теперь при наложении карты мы должны деструктировать ключ и значение с помощью [key, value]. Когда мы хотим изменить все значения, мы вводим новое значение следующим образом [key, ‘new value’]. В данном случае мы просто очищаем значения, поэтому я оставил пустую строку.

Теперь console.log(mappedProduct) выдаст нам следующее

[
  [ 'name', '' ],
  [ 'price', '' ],
  [ 'description', '' ],
  [ 'image', '' ],
  [ 'availability', '' ]
]
Вход в полноэкранный режим Выйти из полноэкранного режима

Потрясающе, теперь все, что нам нужно сделать, это изменить его обратно на объект! Это очень просто, все, что нам нужно, это Object.fromEntries(). Все должно быть обернуто в него, вот так.

const clearedProduct = Object.fromEntries(
  Object.entries(
    product1
  ).map(([key, value]) => [key, ''])
)
Вход в полноэкранный режим Выйти из полноэкранного режима

И на этом мы закончим, если мы console.log(clearedProduct), то получим следующее.

{ 
  name: '', 
  price: '', 
  description: '', 
  image: '', 
  availability: '' 
}
Вход в полноэкранный режим Выход из полноэкранного режима

Если вам все еще трудно представить себе это, вот копия, которую я сделал

TLDR: Используя Object.entries() и Object.fromEntries(), мы можем перебирать объекты, превращая их в массив, а затем обратно в объект.

Object.fromEntries(
  Object.entries(
    objectYouWantToLoopOver
  ).map(([key, value]) => [key, ''])
)
Вход в полноэкранный режим Выйти из полноэкранного режима

Оцените статью
devanswers.ru
Добавить комментарий