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 における clientWidth、offsetWidth、scrollWidth の違い

1. コンセプトこれらはすべて Element の属性であり、要素の幅を示します。 Element....

MySQLオンラインデータベースのデータをクリーンアップする方法

目次01 シナリオ分析02 操作方法03 結果分析01 シナリオ分析今日の午後、開発仲間がオンライン...

VirtualBox での CentOS 8.1 仮想マシンのインストールを最小限に抑える詳細なチュートリアル

1. 関連ツールと画像をダウンロードするダウンロードリンクバーチャルボックス: https://do...

JS WebSocket 切断理由とハートビートの仕組みの詳しい説明

1. 切断理由WebSocket が切断される理由は多数あります。WebSocket が切断されたと...

CSSスタイルで実現されるHTML背景色のグラデーション効果

エフェクトのスクリーンショット:実装コード:コードをコピーコードは次のとおりです。 <!DOC...

formData 形式タイプを使用してファイルをアップロードする Vue の例

Vue では、一般的にフロントエンドとバックエンドを分離したプロジェクトがあり、データ操作を実装する...

MySQL カーソルの概念と使用法の詳細な説明

この記事では、例を使用して MySQL カーソルの概念と使用方法を説明します。ご参考までに、詳細は以...

MySQL データベース分離レベルと MVCC の詳細な説明

目次1. 分離レベルコミットされていない読み取りREAD COMMITED (コミット読み取り/非反...

Vue の要素カレンダー コンポーネントを使用したサンプル コード

まず効果図を見てみましょう: 完全なコードは添付されています <テンプレート> <...

事例を通してLinux NFSの仕組みを詳細に分析

前回の記事に引き続き、web02 サーバーを作成し、web01 サーバーと web02 サーバーの ...

Docker を使用して ELK ログ システムを構築する例

以下のインストールではすべて、インストール ルート ディレクトリとして ~/ ディレクトリが使用され...

WeChatアプレットで計算機機能を実装する

この記事は、WeChat アプレットを使用して作成された簡単な計算機です。興味のある方はご覧ください...

HTMLの基礎を徹底解説(第1部)

1. WEBを理解するWeb ページは主にテキスト、画像、ハイパーリンクなどの要素で構成されていま...

mysql 8.0.19 win10 クイックインストールチュートリアル

このチュートリアルでは、参考までにMySQL 8.0.19のインストールチュートリアルを共有します。...

JavaScript でオブジェクトのプロパティを削除する方法

1. 削除delete は、オブジェクトのプロパティを残さずに削除する唯一の方法ですが、その「代替」...