JavaScriptはオブジェクトの不要なプロパティを削除します

JavaScriptはオブジェクトの不要なプロパティを削除します

Thinking シリーズは、10 分で実用的なプログラミングのアイデアを伝えることを目的としています。

ビジネス開発では、バックエンドから返されたインターフェース データに基づいて、フロントエンドがそれをオブジェクト オブジェクトに保存するという状況によく遭遇します。フロントエンドの開発プロセスでは、いくつかのシナリオの利便性のために、オブジェクトに対応する属性を追加する必要がありますが、これらの属性はバックエンドにとって無意味であるため、保存して送信するときに削除することを望みます。

実際のビジネスコード: 保存する前に、対応する*Valueフィールドを削除する必要があります

非同期saveData(タイプ、データ){
  // 送信時に余分なフィールドを削除する削除 data.isCommonValue
  データを削除する。isRemoteValue
  これを待ちます。$request({
    ...API.EDIT_SERVICE、
    メソッド: type === 'add' ? 'post' : 'put',
    データ
  })
}

上記は一般的な書き方ですが、シナリオによっては最善の方法ではなく、副作用が生じる可能性があります。例として以下を説明します。

上記の状況をよりわかりやすく示すために、例を書き直します (実装を説明するためだけに)。

人 = {
  id: '001',
  名前: 'リガン', 
  メールアドレス: '[email protected]'
}

リクエスト: バックエンドに送信するときに、電子メール フィールドを削除する必要があります。

方法1: 削除

上記のビジネスコード処理方法と同じ

person.email を削除する
console.log(person) // {id: '001', name: 'ligang'}

元のデータ内の関連属性も削除されます。

Reflect.deleteProperty()使用すると、上記の delete と同じ動作でプロパティを削除できます。

Reflect.deleteProperty(人、'メール')

方法2: 分解

元のオブジェクトが参照される場合の副作用を回避しながら、新しいオブジェクトを形成します。

{id, name} = 人とする
newPerson = {id, name} とします。
console.log(newPerson) // {id: '001'、名前: 'ligang'}

元のデータへの参照は切り取られます。この方法は、保持される属性が少ない場合には単純で理解しやすいですが、保持される属性が多すぎる場合には複雑になります。

{email, ...newPerson} = 人とする
console.log(newPerson) // {id: '001'、名前: 'ligang'}

元のデータへの参照は切り取られます。この方法は、保持する属性の数が多い場合には単純で理解しやすいですが、保持する属性の数が少ない場合には複雑になります。

補充する

Vue では、既に作成されたインスタンスにルートレベルのレスポンシブ プロパティを動的に追加することはできません。以下の方法は無効です。

this.$set(this, 'email', '')
this.$set(this.$data, 'email', '')

要約する

実際の使用においては、元のデータに影響を与えないように方法 2 を使用することを強くお勧めします。特に mvvm フレームワークでは、元のデータが応答していることが多いです。delete delete/deleteProperty 「応答関係」を切断することを意味し、削除操作後のデータ応答に問題が発生します。

ここに画像の説明を挿入

データ () {
  戻る {
    人:
      名前: 'リガン',
      メールアドレス: '[email protected]'
    }
  }
},
メソッド: {
	削除プロパティ() {
  	この人物のメールを削除
    // this.$delete(this.person, 'email')
	},
  プロパティを追加します(){
  	this.person.email = 'xxx'
    this.$set(this.person, 'address', 'xxx')
  }
}

1. delete操作を実行すると、js オブジェクトの属性は削除されますが、ページは時間内に応答しません。削除によって更新ビューがトリガーされるようにするには、vue で this.$delete() を使用します。

2. add操作を実行して、電子メールとアドレスの属性を再度追加します。

1. this.person.email = 'xxx'は応答しません

2. this.$set(this.person, 'address', 'xxx')レスポンシブです

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScript のオブジェクトを理解する
  • Javascript のオブジェクトの詳細な説明
  • JavaScriptオブジェクトの詳細な概要
  • JS でオブジェクト属性が存在するかどうかを判断する 5 つの方法
  • JavaScriptカスタムオブジェクトメソッドの概要
  • springboot post インターフェースが json を受け入れる場合、それがオブジェクトに変換されると、プロパティはすべて null になります。
  • JavaScript でよく使われる 5 つのオブジェクト
  • 複雑なJSON文字列をJavaのネストされたオブジェクトに変換する実装
  • JavaScriptオブジェクトの追加、削除、変更、クエリのアプリケーションと例を理解する

<<:  純粋な CSS3 でペットの鶏のサンプルコードを実現

>>:  MySQLデータベースでコマンドを自動補完する3つの方法

推薦する

JavaScript のデシェイクとスロットリングの例

目次安定スロットル: 手ぶれ防止: 一定時間内に最後のタスクのみを実行します。スロットル: 一定期間...

win2008 サーバー セキュリティ設定の展開ドキュメント (推奨)

私は新年を迎える前からプロジェクトに取り組んでいましたが、ここ数日で、新しいサーバー用に新しく増設し...

MYSQL大規模書き込み問題の最適化の詳細な説明

概要: MySQL のパフォーマンス最適化について話すとき、誰もがクエリ パフォーマンスを向上させる...

nginx httpモジュールのデータ保存構造の概要

このセクションから、http モジュールの実装原理について説明します。http モジュールで非常に重...

Linux での VMWare15.5 のインストールに関するチュートリアル

Linux に VMWare をインストールするには、公式 Web サイト https://www....

HTML の著作権記号のフォント選択問題 (著作権記号をより美しくする方法)

1. 問題を発見する&copy; は HTML の著作権記号ですが、間違ったフォントを選択す...

HTML 描画ユーザー登録ページ

この記事では、HTML描画ユーザー登録ページの具体的な実装コードを参考までに共有します。具体的な内容...

Vue 3 での watch と watchEffect の新しい使い方

目次1. 時計の新しい使い方1.1. ウォッチの使用構文1.2. 複数の属性値を監視する1.3. 参...

MySQL データベース開発仕様 [推奨]

最近、問題のある新しい SQL が本番データベースに入力される数を最小限に抑えるために、開発仕様を整...

スクロールバーを非表示にする HTML の簡単な実装

1. 属性付きHTMLタグXML/HTML コードコンテンツをクリップボードにコピー< htm...

Vue バックグラウンドでステータス ラベルをエレガントに記述する例

目次序文最適化変数の抽出二次包装 el-tag コンポーネント使用要約する序文バックエンドシステムの...

共有サイドバーを実装するためのネイティブJS

この記事では、ネイティブ JS で実装された共有サイドバーを紹介します。効果は次のとおりです。 以下...

MySQL mysqladmin クライアントの使用の概要

目次1. サーバーの状態を確認します。 2. ルートパスワードを変更します。 3. mysqlser...

WeChatアプレットのサイレントログインとカスタムログイン状態の維持の詳細な説明

目次1. 背景2. サイレントログインとは何ですか? 3. カスタムログイン状態を維持する方法4. ...

ウェブ画像形式としてPNG、JPG、GIFを選択して使用する方法

では、GIF、PNG、JPG のどの形式を候補形式として選択すればよいのでしょうか。また、どの画像形...