この記事では主に、JS を非配列オブジェクトから配列に変換するいくつかのメソッド、つまり Array.prototype.slice.call(obj)、Array.from(obj)、[...obj]、および Object.values( obj) などのメソッドを使用すれば、困っている友人がそれを参照できます。
前書き
この記事は主に、JS を非配列オブジェクトから配列に変換するいくつかの方法を要約し、参考と学習のために共有します。以下では多くを説明しません。導入。
Array.prototype.slice.call(obj)
このメソッドは、配列のようなオブジェクトを配列に変換できます。いわゆる配列のようなオブジェクトは、長さとインデックスの属性を持つオブジェクトです
。返される配列の長さは、オブジェクトの length 属性の値、インデックスのない属性の値、または length を超えるインデックスを持つ値によって決まります。配列には返されません
実際のハンマーは次のとおりです
let obj = { '0': 3, '1': 13, '2': 23, '3': 33, 'length': 3, 'name': 330 } let arr = Array.prototype.slice.call(obj) // [3, 13, 23]
[].slice.call(obj)の簡潔な記述<code>[].slice.call(obj)
Array.from(obj)
该方法可以将类数组对象和可迭代对象转换为数组
类数组对象上文已提及,何为可迭代对象?
Array、Set、Map 和字符串都是可迭代对象(WeakMap/WeakSet 并不是可迭代对象)
字符串变成了可迭代对象,解决了编码的问题
这些对象都有默认的迭代器,即具有 Symbol.iterator 属性
可以用 for of 循环
所有通过生成器创建的迭代器都是可迭代对象
document.getElementsByTagName("p")
返回的是可迭代对象但不是一个数组Array.isArray(document.getElementsByTagName('p'))
返回 false
通过生成器创建可迭代对象
let obj = { '0': 3, '1': 13, '2': 23, '3': 33 } function *createIterator(obj){ for(let value in obj){ yield obj[value] } } let iterator = createIterator(obj) let arr = Array.from(iterator) // [3, 13, 23, 33]
改造对象本身,使其成为可迭代对象
默认情况下,开发者定义的对象都是不可迭代对象,但如果给 Symbol.iterator
属性添加一个生成器,则可以将其变为可迭代对象
let obj = { '0': 3, '1': 13, '2': 23, '3': 33 } obj[Symbol.iterator] = function* () { for(let value in this){ yield this[value] } } let arr = Array.from(obj) // [3, 13, 23, 33]
判断对象是否为可迭代对象的方法
typeof obj[Symbol.iterator] === 'function'
一点延伸 for of 与 forEach 与 for in
for of 用于循环可迭代对象,包括有 Array, Set, Map, 字符串
而 Array, Set, Map 都有 forEach 方法
另外,NodeList 不是 Array, Set, Map,但是一个可迭代对象,可以用 for of 遍历
此外,用 for of 循环对象时可以通过 break 提前终止,而 forEach 无法提前跳出循环
for in 遍历对象的可枚举属性,包括其原型链上的属性,且不保证顺序
若要遍历对象自身的可枚举属性,使用 hasOwnProperty()
方法来确定属性是否时对象自身属性
Object.getOwnPropertyNames(obj)
, 返回对象自身可枚举或不可枚举属性
反正已经扯远了,那就再扯远一点, Object.assign()
方法将所有可枚举属性的值从一个或多个源对象复制到目标对象
[…obj]
展开运算符可以将可迭代对象转换为数组
例如, [...'obj']
返回 ["o", "b", "j"]
字符串去重
[...new Set('objobj')]
Object.values(obj)
默认情况下,开发者定义的对象都是不可迭代对象,但提供了返回迭代器的方法
entries()
values()
keys()
通过使用这些方法,可以返回相关的数组
与类数组对象需要对象有 length 值不同,Object.values(obj)
返回对象自身可枚举属性值的集合
let obj = { '0': 3, '1': 13, '2': 23, '3': 33 } let arr = Object.values(obj) // [3, 13, 23, 33]
字符串与数组的关系
在很大程度上,可以将字符串看成字符串数组,
都有 length 属性
都有 concat()
/ indexOf()
/ includes()
/ slice()
方法
不过值得注意的是, string 上没有方法可以原地修改它自身的内容,都是返回新的 string
string 还有个 repeat()
このメソッドは、配列のようなオブジェクトと反復可能なオブジェクトを配列に変換できます
Array-同様のオブジェクトは上で説明しました。反復可能なオブジェクトとは何ですか?- Array、Set、Map、String はすべて反復可能なオブジェクトです (WeakMap/WeakSet は反復可能なオブジェクトではありません)
- Character 文字列は次のようになります。エンコードの問題を解決する反復可能なオブジェクト
- これらのオブジェクトにはデフォルトの反復子、つまり Symbol.iterator 属性があります
- ループの for を使用できます🎜
- 🎜ジェネレーターを通じて作成されたすべての反復子は反復可能オブジェクトです🎜
- 🎜
document.getElementsByTagName("p")
は Iterable オブジェクトを返しますが、配列は返しませんArray.isArray(document.getElementsByTagName('p'))
Return false🎜
Symbol.iterator
プロパティに追加すると、反復可能なオブジェクトに変えることができます🎜rrreee🎜オブジェクトが反復可能なオブジェクトかどうかを判断するメソッド🎜rrreee🎜 for of と forEach および for in🎜🎜for of を少し拡張して、Array、Set、Map、string などの反復可能なオブジェクトをループするために使用されます🎜🎜And Array、Set , Map にはすべて forEach メソッドがあります🎜🎜さらに、NodeList は Array、Set、Map ではなく、for of で走査できる反復可能なオブジェクトです🎜🎜さらに、for of を使用してオブジェクトをループする場合、break を渡すことができます早期に終了し、forEach は事前にループから抜け出すことができません🎜🎜for in は、プロトタイプ チェーン上のプロパティを含むオブジェクトの列挙可能なプロパティを走査しますが、順序は保証されません🎜🎜オブジェクト自体の列挙可能なプロパティを走査するには、 hasOwnProperty()
メソッドを使用して、プロパティがオブジェクト自体のプロパティであるかどうかを判断します 🎜🎜Object.getOwnPropertyNames(obj)
は、オブジェクトの列挙可能または列挙不可能なプロパティを返します。オブジェクト自体 🎜🎜 とにかく、行き過ぎです。それでは、もう少し先に進みましょう。 Object.assign()
メソッドは、すべての列挙可能なプロパティの値を 1 つ以上のソース オブジェクトからターゲットにコピーします。 object🎜🎜🎜🎜[…obj]🎜 🎜🎜🎜スプレッド演算子は、反復可能なオブジェクトを配列に変換できます🎜🎜たとえば、 [...'obj']
は ["o" を返します, "b", "j"]
🎜🎜文字列の重複排除🎜🎜[...new Set('objobj')]
🎜🎜🎜🎜Object.values(obj)🎜🎜 🎜🎜デフォルトでは、開発者によって定義されたオブジェクトはすべて反復不可能なオブジェクトですが、反復子を返すメソッドを提供します🎜- 🎜entries()🎜
- 🎜values() 🎜
- 🎜keys()🎜
Object.values(obj)
オブジェクト自体の列挙可能な属性値のコレクションを返します🎜rrreee🎜🎜文字列と配列の関係🎜🎜🎜範囲が広く、文字列は文字列配列と見なすことができます🎜🎜両方の長さ属性があります 🎜🎜 と concat()
/ indexOf()
/ includes があります()
/ slice()
メソッド🎜🎜 ただし、文字列には、独自のコンテンツをその場で変更できるメソッドが存在しないことに注意してください。これらはすべて新しい文字列🎜🎜文字列を返します。 . 指定した数の String コピーを作成する repeat()
メソッドもあります🎜🎜 以上が皆さんの参考になれば幸いです。 🎜🎜関連記事: 🎜🎜🎜JavaScript、Ajax、jQueryの予備理解と3つの関係の比較🎜🎜🎜🎜jqueryとphpを組み合わせてAJAXロングポーリングを実装🎜🎜🎜🎜Jqueryの具体例でAJAXを使用するタイミングを紹介、および AJAX を使用する場所 使用する場所 🎜🎜以上が非配列オブジェクトを配列に変換するための JS メソッドの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ホットトピック









