{"id":324082,"date":"2021-05-31T21:00:21","date_gmt":"2021-05-31T21:00:21","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=324082"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=324082","title":{"rendered":"\u041a\u043e\u043d\u0435\u0446 \u0432\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u00a0snake_keys\u00a0VS\u00a0camelKeys: \u043d\u0430\u0432\u043e\u0434\u0438\u043c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u00a0\u0441\u0442\u0438\u043b\u044f\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442,&nbsp;\u0425\u0430\u0431\u0440!&nbsp;\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440, \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 Ozon, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c&nbsp;\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u043e\u043c.&nbsp;&nbsp;&nbsp;<\/p>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435 \u043c\u043e\u0441\u0442\u043e\u0432 \u0432\u0437\u0430\u0438\u043c\u043e\u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443&nbsp;\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u043e\u043c&nbsp;\u0438 \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u043c \u2013 \u0432 \u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441\u043e \u0441\u0442\u0438\u043b\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.&nbsp;<\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e:&nbsp;<u>\u043d<\/u>\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f&nbsp;\u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0430\u0434&nbsp;\u0441\u0430\u0439\u0442\u043e\u043c, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438&nbsp;\u0442\u0451\u043c\u043d\u043e\u0439 \u0438 \u0441\u0432\u0435\u0442\u043b\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u043d\u0430\u0441\u0443\u0449\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b. \u041e\u0434\u0438\u043d \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432&nbsp;\u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445.&nbsp;<\/p>\n<p><strong>\u0411\u0435\u043a\u0435\u043d\u0434 \u043e\u0442\u0434\u0430\u0435\u0442 \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0432\u0438\u0434\u0435:<\/strong>&nbsp;<\/p>\n<pre><code class=\"javascript\">{  \t\tuser_name: \"user1\",  \t\tmain_title: \"Title\",  } <\/code><\/pre>\n<p><strong>\u0424\u0440\u043e\u043d\u0442\u0435\u043d\u0434:<\/strong><\/p>\n<pre><code class=\"javascript\">{  \t\tuserName: \"user1\",  \t\tmainTitle: \"Title\",  } <\/code><\/pre>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u0432\u044b\u0431\u043e\u0440 \u0441\u0442\u0438\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0433\u043e\u0440\u044f\u0447\u0435\u043c\u0443 \u0441\u043f\u043e\u0440\u0443, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u043a \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043e\u0442\u0430\u0441\u043e\u0432\u043a\u0435.<\/p>\n<p><strong>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c&nbsp;\u0440\u0435\u0448\u0438\u0442\u044c&nbsp;\u044d\u0442\u0443&nbsp;\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443&nbsp;\u2013&nbsp;\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435&nbsp;\u0431\u044d\u043a\u0435\u043d\u0434\u0430&nbsp;\u0432 \u0434\u0430\u043d\u043d\u044b\u0435&nbsp;\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430&nbsp;\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.&nbsp;\u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e&nbsp;JavaScript.<\/strong>&nbsp;<\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c,&nbsp;\u0441\u0442\u0430\u0442\u044c\u044f&nbsp;\u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430&nbsp;\u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c&nbsp;\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u0442&nbsp;\u043e&nbsp;\u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445 \u043f\u0440\u0438\u0451\u043c\u0430\u0445 \u043f\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u0430 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443.&nbsp;<\/p>\n<h2>\u0428\u0430\u0433 1. \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438&nbsp;<\/h2>\n<p>\u041d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f&nbsp;replace. \u041e\u043d\u0430&nbsp;\u0443\u043c\u0435\u0435\u0442&nbsp;\u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c&nbsp;\u043a\u0430\u0436\u0434\u043e\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&nbsp;\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438&nbsp;\u043c\u0430\u043f\u043f\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0432\u0442\u043e\u0440\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c.&nbsp;<\/p>\n<p># \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435&nbsp;snake_keys&nbsp;\u0441\u0442\u0440\u043e\u043a\u0438 \u0432&nbsp;camelKeys:&nbsp;<\/p>\n<pre><code class=\"javascript\">const snakeToCamel = str =&gt; {      return str.replace(\/([_][a-z])\/g, letter =&gt; {          return letter                  .toUpperCase()                  .replace('_', '')      })  } <\/code><\/pre>\n<p># \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435&nbsp;camelKeys&nbsp;\u0441\u0442\u0440\u043e\u043a\u0438 \u0432&nbsp;snake_keys:&nbsp;<\/p>\n<pre><code class=\"javascript\">const camelToSnake = str =&gt; {      return str.replace(\/[A-Z]\/g, letter =&gt; {          return '_' + letter.toLowerCase()      })  } <\/code><\/pre>\n<h2>\u0428\u0430\u0433 2. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438&nbsp;<\/h2>\n<pre><code class=\"javascript\"># \u0412\u043e\u0437\u044c\u043c\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u0438   {  \t\tuser_name: \"user1\",  \t\tmain_title: \"Title\",  } <\/code><\/pre>\n<p>\u041f\u0440\u043e\u0439\u0434\u0451\u043c\u0441\u044f \u043f\u043e \u043a\u043b\u044e\u0447\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0438\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438&nbsp;snakeToCamel.&nbsp;<\/p>\n<pre><code class=\"javascript\">const&nbsp;simpleKeysTransform&nbsp;=&nbsp;value&nbsp;=&gt;&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Object.entries(value).reduce((acc, [key,&nbsp;value]) =&gt; {&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;newKey&nbsp;=&nbsp;snakeToCamel(key)&nbsp;          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;{...acc, [newKey]:&nbsp;value}&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;}, {})&nbsp; }&nbsp;<\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043d\u0430 \u0432\u0445\u043e\u0434 \u0435\u0449\u0451&nbsp;\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0443\u044e \u0437\u0430 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0438\u0434 \u0441\u0442\u0438\u043b\u044f \u043a\u043b\u044e\u0447\u0435\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<pre><code class=\"javascript\">const keysTransform1 = (value, isInitialSnake = true) =&gt; {      const chooseStyle = isInitialSnake ? snakeToCamel : camelToSnake       return Object.entries(value).reduce((acc, [key, value]) =&gt; {          const newKey = chooseStyle(key)           return {...acc, [newKey]: value}      }, {})  } <\/code><\/pre>\n<h2>\u0428\u0430\u0433 3. \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438&nbsp;<\/h2>\n<pre><code class=\"javascript\"># \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440   {    user_info: {      first_name: \"User\",      last_name: \"Userin\u201d    }  } <\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c&nbsp;\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e.&nbsp;\u041e\u0431\u0435\u0440\u043d\u0451\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438 \u0432 \u043d\u0435\u0439 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c:&nbsp;\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043d\u0430\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c. \u0415\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043d\u043e\u0432\u0430 \u0438 \u0441\u043d\u043e\u0432\u0430.&nbsp;<\/p>\n<pre><code class=\"javascript\">const keysTransform2 = (input, isInitialSnake = true) =&gt; {      const chooseStyle = isInitialSnake ? snakeToCamel : camelToSnake       const recursiveTransform = value =&gt; {           if (value &amp;&amp; typeof value === 'object') {              return Object.entries(value).reduce((acc, [key, value]) =&gt; {                  const newKey = chooseStyle(key)                  const newValue = recursiveTransform(value)                   return {...acc, [newKey]: newValue}              }, {})          }           return value      }       return recursiveTransform(input)  } <\/code><\/pre>\n<h2>\u0428\u0430\u0433 4. \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438&nbsp;<\/h2>\n<pre><code class=\"javascript\"># \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440   {    users: [      {        first_name: \"user1\",        phone_number: 8996923      },      {        first_name: \"user2\",        phone_number: 12312312      }    ]    }  <\/code><\/pre>\n<p>\u0412\u0441\u0451&nbsp;\u0434\u043e \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439&nbsp;\u0435\u0433\u043e&nbsp;\u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430\u0432\u0435\u0441\u0438\u043c \u043d\u0430\u0448\u0443 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e.&nbsp;<\/p>\n<pre><code class=\"javascript\">const keysTransform = (input, isInitialSnake = true) =&gt; {       const chooseStyle = isInitialSnake ? snakeToCamel : camelToSnake       const recursiveTransform = value =&gt; {          if (Array.isArray(value)) {              return value.map(recursiveTransform)          }           if (value &amp;&amp; typeof value === 'object') {              return Object.entries(value).reduce((acc, [key, value]) =&gt; {                  const newKey = chooseStyle(key)                  const newValue = recursiveTransform(value)                   return {...acc, [newKey]: newValue}              }, {})          }           return value      }       return recursiveTransform(input)  } <\/code><\/pre>\n<h2>\u041f\u0435\u0440\u0435\u043c\u0438\u0440\u0438\u0435&nbsp;<\/h2>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c: \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438\u0437&nbsp;snake_keys&nbsp;\u0432&nbsp;camelKeys&nbsp;\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.&nbsp;\u0427\u0443\u0442\u044c-\u0447\u0443\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u0440\u0430\u0437\u0434\u043e\u0440\u0430 \u043c\u0435\u0436\u0434\u0443&nbsp;\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u043e\u043c&nbsp;\u0438 \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u043c&nbsp;\u2013 \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0436\u0435!&nbsp;<\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442&nbsp;\u0438&nbsp;\u0434\u0440\u0443\u0433\u0438\u0435&nbsp;\u0441\u0442\u0438\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 \u0441\u043b\u043e\u0432&nbsp;(PascalKeys,&nbsp;kebab-keys, UPPER_SNAKE_KEYS).&nbsp;\u041f\u0440\u0438 \u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u0438, \u0432\u044b \u0443\u0436\u0435 \u0441\u0430\u043c\u0438 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0441 \u043d\u0438\u043c\u0438 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f.&nbsp;<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/ozontech\/blog\/560294\/\"> https:\/\/habr.com\/ru\/company\/ozontech\/blog\/560294\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442,&nbsp;\u0425\u0430\u0431\u0440!&nbsp;\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440, \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 Ozon, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c&nbsp;\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u043e\u043c.&nbsp;&nbsp;&nbsp;<\/p>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435 \u043c\u043e\u0441\u0442\u043e\u0432 \u0432\u0437\u0430\u0438\u043c\u043e\u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443&nbsp;\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u043e\u043c&nbsp;\u0438 \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u043c \u2013 \u0432 \u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441\u043e \u0441\u0442\u0438\u043b\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.&nbsp;<\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e:&nbsp;<u>\u043d<\/u>\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f&nbsp;\u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0430\u0434&nbsp;\u0441\u0430\u0439\u0442\u043e\u043c, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438&nbsp;\u0442\u0451\u043c\u043d\u043e\u0439 \u0438 \u0441\u0432\u0435\u0442\u043b\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u043d\u0430\u0441\u0443\u0449\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b. \u041e\u0434\u0438\u043d \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432&nbsp;\u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445.&nbsp;<\/p>\n<p><strong>\u0411\u0435\u043a\u0435\u043d\u0434 \u043e\u0442\u0434\u0430\u0435\u0442 \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0432\u0438\u0434\u0435:<\/strong>&nbsp;<\/p>\n<pre><code class=\"javascript\">{  \t\tuser_name: \"user1\",  \t\tmain_title: \"Title\",  } <\/code><\/pre>\n<p><strong>\u0424\u0440\u043e\u043d\u0442\u0435\u043d\u0434:<\/strong><\/p>\n<pre><code class=\"javascript\">{  \t\tuserName: \"user1\",  \t\tmainTitle: \"Title\",  } <\/code><\/pre>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u0432\u044b\u0431\u043e\u0440 \u0441\u0442\u0438\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0433\u043e\u0440\u044f\u0447\u0435\u043c\u0443 \u0441\u043f\u043e\u0440\u0443, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u043a \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043e\u0442\u0430\u0441\u043e\u0432\u043a\u0435.<\/p>\n<p><strong>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c&nbsp;\u0440\u0435\u0448\u0438\u0442\u044c&nbsp;\u044d\u0442\u0443&nbsp;\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443&nbsp;\u2013&nbsp;\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435&nbsp;\u0431\u044d\u043a\u0435\u043d\u0434\u0430&nbsp;\u0432 \u0434\u0430\u043d\u043d\u044b\u0435&nbsp;\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430&nbsp;\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.&nbsp;\u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e&nbsp;JavaScript.<\/strong>&nbsp;<\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c,&nbsp;\u0441\u0442\u0430\u0442\u044c\u044f&nbsp;\u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430&nbsp;\u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c&nbsp;\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u0442&nbsp;\u043e&nbsp;\u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445 \u043f\u0440\u0438\u0451\u043c\u0430\u0445 \u043f\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u0430 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443.&nbsp;<\/p>\n<h2>\u0428\u0430\u0433 1. \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438&nbsp;<\/h2>\n<p>\u041d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f&nbsp;replace. \u041e\u043d\u0430&nbsp;\u0443\u043c\u0435\u0435\u0442&nbsp;\u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c&nbsp;\u043a\u0430\u0436\u0434\u043e\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f&nbsp;\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438&nbsp;\u043c\u0430\u043f\u043f\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0432\u0442\u043e\u0440\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c.&nbsp;<\/p>\n<p># \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435&nbsp;snake_keys&nbsp;\u0441\u0442\u0440\u043e\u043a\u0438 \u0432&nbsp;camelKeys:&nbsp;<\/p>\n<pre><code class=\"javascript\">const snakeToCamel = str =&gt; {      return str.replace(\/([_][a-z])\/g, letter =&gt; {          return letter                  .toUpperCase()                  .replace('_', '')      })  } <\/code><\/pre>\n<p># \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435&nbsp;camelKeys&nbsp;\u0441\u0442\u0440\u043e\u043a\u0438 \u0432&nbsp;snake_keys:&nbsp;<\/p>\n<pre><code class=\"javascript\">const camelToSnake = str =&gt; {      return str.replace(\/[A-Z]\/g, letter =&gt; {          return '_' + letter.toLowerCase()      })  } <\/code><\/pre>\n<h2>\u0428\u0430\u0433 2. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438&nbsp;<\/h2>\n<pre><code class=\"javascript\"># \u0412\u043e\u0437\u044c\u043c\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u0438   {  \t\tuser_name: \"user1\",  \t\tmain_title: \"Title\",  } <\/code><\/pre>\n<p>\u041f\u0440\u043e\u0439\u0434\u0451\u043c\u0441\u044f \u043f\u043e \u043a\u043b\u044e\u0447\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0438\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438&nbsp;snakeToCamel.&nbsp;<\/p>\n<pre><code class=\"javascript\">const&nbsp;simpleKeysTransform&nbsp;=&nbsp;value&nbsp;=&gt;&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Object.entries(value).reduce((acc, [key,&nbsp;value]) =&gt; {&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;newKey&nbsp;=&nbsp;snakeToCamel(key)&nbsp;          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;{...acc, [newKey]:&nbsp;value}&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;}, {})&nbsp; }&nbsp;<\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043d\u0430 \u0432\u0445\u043e\u0434 \u0435\u0449\u0451&nbsp;\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0443\u044e \u0437\u0430 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0438\u0434 \u0441\u0442\u0438\u043b\u044f \u043a\u043b\u044e\u0447\u0435\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<pre><code class=\"javascript\">const keysTransform1 = (value, isInitialSnake = true) =&gt; {      const chooseStyle = isInitialSnake ? snakeToCamel : camelToSnake       return Object.entries(value).reduce((acc, [key, value]) =&gt; {          const newKey = chooseStyle(key)           return {...acc, [newKey]: value}      }, {})  } <\/code><\/pre>\n<h2>\u0428\u0430\u0433 3. \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438&nbsp;<\/h2>\n<pre><code class=\"javascript\"># \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440   {    user_info: {      first_name: \"User\",      last_name: \"Userin\u201d    }  } <\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c&nbsp;\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e.&nbsp;\u041e\u0431\u0435\u0440\u043d\u0451\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438 \u0432 \u043d\u0435\u0439 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c:&nbsp;\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043d\u0430\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c. \u0415\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043d\u043e\u0432\u0430 \u0438 \u0441\u043d\u043e\u0432\u0430.&nbsp;<\/p>\n<pre><code class=\"javascript\">const keysTransform2 = (input, isInitialSnake = true) =&gt; {      const chooseStyle = isInitialSnake ? snakeToCamel : camelToSnake       const recursiveTransform = value =&gt; {           if (value &amp;&amp; typeof value === 'object') {              return Object.entries(value).reduce((acc, [key, value]) =&gt; {                  const newKey = chooseStyle(key)                  const newValue = recursiveTransform(value)                   return {...acc, [newKey]: newValue}              }, {})          }           return value      }       return recursiveTransform(input)  } <\/code><\/pre>\n<h2>\u0428\u0430\u0433 4. \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438&nbsp;<\/h2>\n<pre><code class=\"javascript\"># \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440   {    users: [      {        first_name: \"user1\",        phone_number: 8996923      },      {        first_name: \"user2\",        phone_number: 12312312      }    ]    }  <\/code><\/pre>\n<p>\u0412\u0441\u0451&nbsp;\u0434\u043e \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439&nbsp;\u0435\u0433\u043e&nbsp;\u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430\u0432\u0435\u0441\u0438\u043c \u043d\u0430\u0448\u0443 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e.&nbsp;<\/p>\n<pre><code class=\"javascript\">const keysTransform = (input, isInitialSnake = true) =&gt; {       const chooseStyle = isInitialSnake ? snakeToCamel : camelToSnake       const recursiveTransform = value =&gt; {          if (Array.isArray(value)) {              return value.map(recursiveTransform)          }           if (value &amp;&amp; typeof value === 'object') {              return Object.entries(value).reduce((acc, [key, value]) =&gt; {                  const newKey = chooseStyle(key)                  const newValue = recursiveTransform(value)                   return {...acc, [newKey]: newValue}              }, {})          }           return value      }       return recursiveTransform(input)  } <\/code><\/pre>\n<h2>\u041f\u0435\u0440\u0435\u043c\u0438\u0440\u0438\u0435&nbsp;<\/h2>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c: \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438\u0437&nbsp;snake_keys&nbsp;\u0432&nbsp;camelKeys&nbsp;\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.&nbsp;\u0427\u0443\u0442\u044c-\u0447\u0443\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u0440\u0430\u0437\u0434\u043e\u0440\u0430 \u043c\u0435\u0436\u0434\u0443&nbsp;\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u043e\u043c&nbsp;\u0438 \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u043c&nbsp;\u2013 \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0436\u0435!&nbsp;<\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442&nbsp;\u0438&nbsp;\u0434\u0440\u0443\u0433\u0438\u0435&nbsp;\u0441\u0442\u0438\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 \u0441\u043b\u043e\u0432&nbsp;(PascalKeys,&nbsp;kebab-keys, UPPER_SNAKE_KEYS).&nbsp;\u041f\u0440\u0438 \u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u0438, \u0432\u044b \u0443\u0436\u0435 \u0441\u0430\u043c\u0438 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0441 \u043d\u0438\u043c\u0438 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f.&nbsp;<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/ozontech\/blog\/560294\/\"> https:\/\/habr.com\/ru\/company\/ozontech\/blog\/560294\/<\/a><br \/><\/br><\/br><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-324082","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/324082","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=324082"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/324082\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=324082"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=324082"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=324082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}