{"componentChunkName":"component---src-templates-post-js","path":"/javascript/7-poleznyh-ulovok-s-rest-parametrami-i-spread-operatorom-na-javascript-objectah/","result":{"pageContext":{"slug":"7-poleznyh-ulovok-s-rest-parametrami-i-spread-operatorom-na-javascript-objectah","content":"\n<p>7 удобных трюков с rest и spread, которые значительно упростят ваш процесс написания кода.</p>\n\n\n\n<p class=\"author\"><a rel=\"noreferrer noopener\" href=\"https://blog.bitsrc.io/6-tricks-with-resting-and-spreading-javascript-objects-68d585bdc83\" target=\"_blank\"><em>Перевод 7 Tricks with Resting and Spreading JavaScript Objects</em></a></p>\n\n\n\n<p>Если у вас есть время, то советую сначала прочитать&nbsp;<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https://stasonmars.ru/javascript/operator-spread-i-rest-parametry-v-javascript/\">Оператор spread и rest параметры в JavaScript</a></p>\n\n\n\n<p id=\"345d\">Rest параметры и оператор spread можно использовать не только для простой работы с остаточными аргументами и для создании массивов.</p>\n\n\n\n<p id=\"ee8b\">Ниже вы узнаете 7 малоизвестных трюков с использованием вышеупомянутых операторов в JavaScript.</p>\n\n\n\n<h2 id=\"3411\">1. Добавление свойств</h2>\n\n\n\n<p id=\"07db\">Вы можете клонировать объект, параллельно добавляя дополнительные свойства клонированному объекту.</p>\n\n\n\n<p id=\"d0b3\">В этом примере&nbsp;<code>user</code>&nbsp;клонирован и к нему добавлен&nbsp;<code>password</code>&nbsp;в&nbsp;<code>userWithPass</code>.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>const user = { id: 100, name: 'Howard Moon'}\nconst userWithPass = { ...user, password: 'Password!' }\n\nuser //=> { id: 100, name: 'Howard Moon' }\nuserWithPass //=> { id: 100, name: 'Howard Moon', password: 'Password!' }</code></pre>\n\n\n\n<h2 id=\"baad\">2. Слияние объектов</h2>\n\n\n\n<p id=\"f331\">Ещё вы можете слить два объекта в один новый.</p>\n\n\n\n<p id=\"731a\"><code>part1</code>&nbsp;и&nbsp;<code>part2</code>&nbsp;сливаются в&nbsp;<code>user1</code>.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>const part1 = { id: 100, name: 'Howard Moon' }\nconst part2 = { id: 100, password: 'Password!' }\n\nconst user1 = { ...part1, ...part2 }\n//=> { id: 100, name: 'Howard Moon', password: 'Password!' }</code></pre>\n\n\n\n<p>Объекты также можно слить и с таким синтаксисом:</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>const partial = { id: 100, name: 'Howard Moon' }\nconst user = { ...partial, id: 100, password: 'Password!' }\n\nuser //=> { id: 100, name: 'Howard Moon', password: 'Password!' }</code></pre>\n\n\n\n<h2>3. Исключить свойства объекта</h2>\n\n\n\n<p>Свойства можно удалить используя деструктуризацию в комбинации с rest оператором. Тут мы деструктуризируем&nbsp;<code>password</code>&nbsp;и остальные свойства объекта отдаются как rest.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>const noPassword = ({ password, ...rest }) => rest\nconst user = {\n  id: 100,\n  name: 'Howard Moon',\n  password: 'Password!'\n}\n\nnoPassword(user) //=> { id: 100, name: 'Howard moon' }</code></pre>\n\n\n\n<h2 id=\"14da\">4. Динамическое исключение свойств</h2>\n\n\n\n<p id=\"8b9d\">Функция removeProperty берёт&nbsp;<code>props</code>&nbsp;как аргумент. Используя вычисление имен свойств&nbsp;<code>prop</code>&nbsp;может быть исключен динамически из объекта клона.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>const user1 = {\n  id: 100,\n  name: 'Howard Moon',\n  password: 'Password!'\n}\nconst removeProperty = prop => ({ &#91;prop]: _, ...rest }) => rest\n//                     ----       ------\n//                          \\   /\n//                dynamic destructuring\n\nconst removePassword = removeProperty('password')\nconst removeId = removeProperty('id')\n\nremovePassword(user1) //=> { id: 100, name: 'Howard Moon' }\nremoveId(user1) //=> { name: 'Howard Moon', password: 'Password!' }</code></pre>\n\n\n\n<h2 id=\"5a0d\">5. Организация свойств</h2>\n\n\n\n<p id=\"8f3e\">Иногда свойства находятся не в нужном нам порядке. Используя несколько трюков мы можем поставить нужные свойства в самый верх списка или же наоборот, в самый низ.</p>\n\n\n\n<p id=\"fb85\">Чтобы отправить&nbsp;<code>id</code>&nbsp;на первое место, добавьте&nbsp;<code>id: undefined</code>&nbsp;новому объекту перед оператором расширения.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>const user3 = {\n  password: 'Password!',\n  name: 'Naboo',\n  id: 300\n}\n\nconst organize = object => ({ id: undefined, ...object })\n//                            -------------\n//                          /\n//  move id to the first property\n\norganize(user3)\n//=> { id: 300, password: 'Password!', name: 'Naboo' }</code></pre>\n\n\n\n<p>Чтобы отправить&nbsp;<code>password</code>&nbsp;на последнее место, то сначала деструктуризируйте&nbsp;<code>password</code>&nbsp;из&nbsp;<code>object</code>. Далее, выставьте&nbsp;<code>password</code>&nbsp;за оператором расширения.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>const user3 = {\n  password: 'Password!',\n  name: 'Naboo',\n  id: 300\n}\n\nconst organize = ({ password, ...object }) =>\n  ({ ...object, password })\n//              --------\n//             /\n// move password to last property\n\norganize(user3)\n//=> { name: 'Naboo', id: 300, password: 'Password!' }</code></pre>\n\n\n\n<h2 id=\"ae18\">6. Дефолтные свойства</h2>\n\n\n\n<p id=\"3057\">Дефолтные свойства это значения, которые будут выставлены только когда они не включены в оригинальный объект.</p>\n\n\n\n<p id=\"3d9e\">В нашем примере&nbsp;<code>user2</code>&nbsp;не включает в себя&nbsp;<code>quotes</code>. Функция&nbsp;<code>setDefaults</code>&nbsp;проверяет есть ли в объектах&nbsp;<code>quotes</code>, если нет, то он будет выставлен на&nbsp;<code>[]</code>.</p>\n\n\n\n<p id=\"0dbe\">Вызывая&nbsp;<code>setDefaults(user2)</code>, отдающееся значение будет включать в себя&nbsp;<code>quotes: []</code>.</p>\n\n\n\n<p id=\"7c92\">Вызывая&nbsp;<code>setDefaults(user4)</code>&nbsp;ничего не поменяется, потому что&nbsp;<code>user4</code>&nbsp;уже содержит&nbsp;<code>quotes</code>.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>const user2 = {\n  id: 200,\n  name: 'Vince Noir'\n}\n\nconst user4 = {\n  id: 400,\n  name: 'Bollo',\n  quotes: &#91;\"I've got a bad feeling about this...\"]\n}\n\nconst setDefaults = ({ quotes = &#91;], ...object}) =>\n  ({ ...object, quotes })\n\nsetDefaults(user2)\n//=> { id: 200, name: 'Vince Noir', quotes: &#91;] }\n\nsetDefaults(user4)\n//=> {\n//=>   id: 400,\n//=>   name: 'Bollo',\n//=>   quotes: &#91;\"I've got a bad feeling about this...\"]\n//=> }</code></pre>\n\n\n\n<p>Это также может быть написано таким образом:</p>\n\n\n\n<pre class=\"wp-block-code\"><code>const setDefaults = ({ ...object}) => ({ quotes: &#91;], ...object })</code></pre>\n\n\n\n<h2 id=\"304f\">7. Переименовывание свойств</h2>\n\n\n\n<p id=\"e6e4\">Совмещая методики описанные выше, мы можем создать функцию которая переименовывает свойства.</p>\n\n\n\n<p id=\"4caf\">Представьте, что у вас есть несколько объектов с&nbsp;<code>ID</code>&nbsp;в верхнем регистре, которые должны быть в нижнем. Начните с деструктуризации&nbsp;<code>ID</code>&nbsp;из объекта. Далее, верните его в объект как&nbsp;<code>id</code>.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>const renamed = ({ ID, ...object }) => ({ id: ID, ...object })\n\nconst user = {\n  ID: 500,\n  name: \"Bob Fossil\"\n}\n\nrenamed(user) //=> { id: 500, name: 'Bob Fossil' }</code></pre>\n\n\n\n<h2 id=\"26fb\">8. БОНУС! Добавляем свойства по условию</h2>\n\n\n\n<p id=\"f80f\">Спасибо&nbsp;<a rel=\"noreferrer noopener\" href=\"http://twitter.com/vinialbano\" target=\"_blank\">@vinialbano</a>&nbsp;за то, что указал на то, что вы можете ещё и добавлять свойства в зависимости от условий. В этом примере,&nbsp;<code>password</code>&nbsp;будет добавлен только если&nbsp;<code>password</code>&nbsp;определен.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>const user = { id: 100, name: 'Howard Moon' }\nconst password = 'Password!'\nconst userWithPassword = {\n  ...user,\n  id: 100,\n  ...(password &amp;&amp; { password })\n}\n\nuserWithPassword //=> { id: 100, name: 'Howard Moon', password: 'Password!' }</code></pre>\n\n\n\n<p></p>\n","type":"js","date":"2021-01-22T12:02:18.000Z","acf":{"seo_desc":"7 удобных трюков с rest и spread, которые значительно упростят ваш процесс написания кода.","keywords":"трюки с rest, трюки с spread javascript, упростить spread и rest javascript, как работать с spread и rest javascript","pub_date":"2020-03-11","tags":"JavaScript, spread оператор, rest параметры, JavaScript советы"},"title":"7 полезных уловок с rest параметрами и spread операторами на JavaScript объектах","id":"39b80613-6819-585a-a827-3d313393adaf","excerpt":"<p>7 удобных трюков с rest и spread, которые значительно упростят ваш процесс написания кода.</p>\n","featured_media":{"source_url":"https://stasonmars.ru/wp/wp-content/uploads/2021/01/restspreadkjnkjn.jpg"},"interesting":[{"title":"7 полезных уловок с rest параметрами и spread операторами на JavaScript объектах","slug":"7-poleznyh-ulovok-s-rest-parametrami-i-spread-operatorom-na-javascript-objectah","type":"js"},{"title":"Оператор spread и rest параметры в JavaScript","slug":"operator-spread-i-rest-parametry-v-javascript","type":"js"}]}},"staticQueryHashes":["3576131997","63159454"]}