JS ES6 スプレッド演算子の魔法のような使い方

JS ES6 スプレッド演算子の魔法のような使い方

1. 属性を追加する

オブジェクトをコピーすると、新しいプロパティが追加されます。

この例では、ユーザー オブジェクトを userWithPass にコピーし、パスワード プロパティを追加します。

const ユーザー = { id: 110, 名前: 'Kayson Li'}
const userWithPass = { ...user, password: 'パスワード!' }

ユーザー //=> { id: 110、名前: 'Kayson Li'}
userWithPass //=> { id: 110、 name: 'Kayson Li'、 password: 'パスワード!' }

2. 複数のオブジェクトを結合する

... を使用すると、複数のオブジェクトを新しいオブジェクトに結合することができます。 part1 と part2 を user1 にマージします。

const part1 = { id: 110, name: 'ケイソン・リー' }
const part2 = { id: 110, password: 'パスワード!' }

定数 user1 = { ...part1, ...part2 }
//=> { id: 110、 name: 'Kayson Li'、 password: 'パスワード!' }

3. オブジェクトのプロパティを削除する

オブジェクトからプロパティを削除するには、構造化分解を REST 演算子と組み合わせて使用​​できます。この例では、パスワードが分解され、他の属性が REST オブジェクトに保持されて返されます。

const noPassword = ({ パスワード、...rest }) => rest
定数ユーザー = {
  id: 110,
  名前: 'ケイソン・リー'、
  パスワード: 'パスワード!'
}

noPassword(user) //=> { id: 110, name: 'Kayson Li' }

4. 属性を動的に削除する

例を見てみましょう。 removeProperty 関数は、パラメータ prop を受け入れます。動的プロパティ名機能を使用すると、コピーされたオブジェクトから prop を動的に削除できます。

定数user1 = {
  id: 110,
  名前: 'ケイソン・リー'、
  パスワード: 'パスワード!'
}
const removeProperty = prop => ({ [prop]: _, ...rest }) => rest
// ---- ------
// \ /
// 動的分解 const removePassword = removeProperty('password')
定数removeId = removeProperty('id')

removePassword(user1) //=> { id: 110, name: 'Kayson Li' }
removeId(user1) //=> { name: 'Kayson Li', password: 'パスワード!' }

5. 属性の順序を調整する

オブジェクトのプロパティが希望どおりの順序になっていない場合があります。いくつかのトリックを使用すると、属性を前面または背面に移動できます。

id を先頭に移動するには、展開されたオブジェクトの前に id: undefined を配置します。

定数user3 = {
  パスワード: 'パスワード!',
  名前: 'ブルース'、
  id: 300
}

const 整理 = オブジェクト => ({ id: undefined, ... オブジェクト })
// -------------
// /
// id を最初の属性位置に移動する organize(user3)
//=> { id: 300, password: 'パスワード!', name: 'Bruce' }

パスワードを最後の位置に移動するには、まずオブジェクトからパスワードを分解し、展開されたオブジェクトの後にパスワードを配置します。

定数user3 = {
  パスワード: 'パスワード!',
  名前:「ブルース」
  id: 300
}

const organize = ({ パスワード, ...オブジェクト }) =>
  ({ ...オブジェクト, パスワード })
//--------
// /
// パスワードを末尾に移動する organize(user3)
//=> { name: 'Bruce'、 id: 300、 password: 'パスワード!' }

6. プロパティのデフォルト値を設定する

オブジェクトに特定の属性がない場合、その属性をオブジェクトに追加してデフォルト値を設定する必要がある場合があります。

たとえば、user2 には引用符属性がありません。setDefaults 関数の目的は、すべてのオブジェクトに引用符が付いており、デフォルト値 [] があることを確認することです。

setDefaults(user2) を実行すると、返されるオブジェクトに引用符 [] が含まれます。

setDefaults(user4) を実行します。user4 にはすでに引用符が付いているため、変更されません。

定数user2 = {
  id: 200,
  名前: 'ジャック・マー'
}

定数user4 = {
  id: 400,
  名前: '魯迅'、
  引用: ["私はそんなことは言っていない..."]
}

const setDefaults = ({ quotes = [], ...object}) =>
  ({ ...オブジェクト、引用符 })

デフォルト設定(ユーザー2)
//=> { id: 200、名前: 'ジャック・マー'、引用符: [] }

デフォルト設定(user4)
//=> {
//=> id: 400,
//=> 名前: '魯迅',
//=> 引用: ["私はそんなことは言っていません..."]
//=> }

この属性を先頭に置きたい場合は、次のように記述します。

const setDefaults = ({ ...オブジェクト}) => ({ 引用符: [], ...オブジェクト })

7: 属性名の変更

これまでの手法を組み合わせることで、属性の名前を変更する関数を作成できます。

一部のオブジェクトに大文字の ID 属性があり、それを小文字に変更したいとします。どうすればよいでしょうか?まず、オブジェクトから ID 値を分解し、この値を新しいオブジェクトにマージして小文字の ID に変更します。

const の名前が変更されました = ({ ID, ...object }) => ({ id: ID, ...object })

定数ユーザー = {
  ID: 500,
  名前: 「張全丹」
}

renamed(user) //=> { id: 500, name: '张全蛋' }

8. 他にも素晴らしい手術がある

条件に基づいて特定の属性を追加するかどうかを決定できます。これは、リクエスト パラメータを構築するときに非常に便利です。たとえば、パスワードに値がある場合にのみこの属性を追加します。

const ユーザー = { id: 110, 名前: 'ケイソン・リー' }
const password = 'パスワード!'
定数userWithPassword = {
  ...ユーザー、
  id: 100,
  ...(パスワード && { パスワード })
}

userWithPassword //=> { id: 110、 name: 'Kayson Li'、 password: 'パスワード!' }

上記は、JS ES6 スプレッド演算子のいくつかの素晴らしい使用方法の詳細です。JS ES6 スプレッド演算子の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • JavaScript ES6 分割演算子の理解と応用
  • シンプルなカルーセルの最も完全なコード分析を実装するJavaScript(ES6オブジェクト指向)
  • シンプルなショッピングカートの最も完全なコード分析を実装する JavaScript (ES6 オブジェクト指向)
  • JavaScript es6 における var、let、const の違いの詳細な説明
  • JS における ES6 継承と ES5 継承の違い
  • Node.jsがES6モジュールを処理する方法の詳細な説明
  • JS ES6コーディング標準の詳細な説明
  • JSでES6クラスの使い方をすぐにマスター
  • JS ES6 変数分割代入の詳細な説明
  • フロントエンドJavaScript ES6の詳細について

<<:  Windows システムに mysql5.7.21 をインストールするための詳細なチュートリアル

>>:  docker mysqlの起動時に初期化SQLを実行する

推薦する

js における浅いコピーと深いコピーの詳細な説明

目次1. jsメモリ2. 譲渡3. 浅いコピー4. ディープコピー序文:以下の記事を読む前に、記憶に...

MySQL の組み込み関数 find_in_set を使用した効率的なあいまい検索の詳細な説明

一般的に使用される方法は次の 4 つです。 1.locate()メソッドを使用する一般的な使用法: ...

dockerでredis5.0.3をインストールする方法

1. 公式5.0.3イメージを取得する [root@localhost ~]# docker pul...

JSベースの手持ち連射機能+テキスト揺れ特殊効果コードの簡単実装

少し前にTikTokで揺れる連打が流行っていたので真似してみることにしました。さっそく効果をみてみま...

MySQL 8.0.26 のインストールと簡易チュートリアル (インターネット上で最も完全)

目次1. MySQLをダウンロードする1.1 ダウンロード1.2 インストール1. MySQLをダウ...

MySQL 5.7.20 のインストールと設定方法のグラフィック チュートリアル (win10)

この記事では、MySQL 5.7.20のインストールと設定方法を参考までに紹介します。具体的な内容は...

CSS3 box-shadow プロパティの詳細な例

CSS3 - 影の追加(ボックスシャドウの使用) CSS3 - div またはテキストに影を追加する...

Reactコンポーネントのライフサイクルの詳細な説明

目次1.ライフサイクルとは何か2. 読み込みプロセス1.コンストラクタ2. レンダリング3. コンポ...

MySQL 8.0.24 バージョンのインストールと設定方法のグラフィックチュートリアル

この記事ではMySQL 8.0.24バージョンのインストールと設定方法を記録し、皆さんと共有しますM...

Docker に nginx をインストールし、https 経由でアクセスを構成する方法

1. 最新のnginx dockerイメージをダウンロードする $ docker pull ngin...

Vueはシンプルなショッピングカートの例を実装します

この記事では、参考までに、Vue の具体的なコードを共有して、簡単なショッピングカートを実装します。...

Vue2.0+ElementUI+PageHelperで実装されたテーブルページング機能

序文最近、いくつかのフロントエンド プロジェクトに取り組んでおり、ページにいくつかのテーブルを表示す...

Windows7 での Mysql5.7 my.ini ファイルの読み込みパスとデータの場所の変更方法

更新: MySQL の公式 Web サイトにアクセスして MySQL インストーラーをインストールし...

Vue3 のウォッチの使用方法とベストプラクティスガイド

目次序文🌟 1. APIの紹介2. 複数のデータソースの監視3. リスニングアレイ4. 監視対象5....

CSS で透明なグラデーション効果を実装するためのサンプルコード

Zhihu Discovery コラムのタイトル画像は、通常、以下のように表示されます。明らかに、グ...