序文
arrify
数日前にプロジェクトでこのツールを使用しarrify
、今日ソースコードを読んでみましたが、ソースコード全体の長さはわずか十数行で、それほど難しいものではなかったので、読んだ経験を共有したいと思います。
恐怖の紹介
arrifyとは何か、そしてそれが何をするのか、まだ知らない友人もいるかもしれません。簡単に理解すると配列変換ツールです。公式には、渡された値を配列に変換します。
まずはarrifyをインストールしましょう。
npm install arrify
このようにして、ツールをプロジェクトに正式に導入できます。
import arrify from 'arrify';
ソースコードの紹介
以下はソースコード部分です。
export default function arrify(value) {
if (value === null || value === undefined) {return [];
}
if (Array.isArray(value)) {return value;
}
if (typeof value === 'string') {return [value];
}
if (typeof value[Symbol.iterator] === 'function') {return [...value];
}
return [value];
}
ソースコードは非常にシンプルで、わずか十数行です。その中で 4 つの判定が行われますif
。最初の 3 つの判定は理解しやすいです。4 番目の判定では、反復子の判定が追加されます。入力されたパラメータが反復可能なオブジェクトの場合、スプレッド演算子を使用して配列に変換されます。簡単に言うと、さまざまな種類のチェックを解決し、...
それらを分解します。
使用を確認します
以下に示すように、空のプロジェクトを作成し、arrifyソース コードを記述して、バックグラウンドで値を出力します。
// 源码部分
function arrify(value) {
if (value === null || value === undefined) {
return [];
}
if (Array.isArray(value)) {
return value;
}
if (typeof value === 'string') {
return [value];
}
if (typeof value[Symbol.iterator] === 'function') {
return [...value];
}
return [value];
}
// 打印值
console.log(arrify('abc'));
console.log(arrify('[a,b,c]'));
console.log(arrify(null));
console.log(arrify(undefined));
console.log(arrify(new Set('[a,b,c]')));
function App() {return (<div></div>);
}
export default App;
背景を観察すると、次のような結果が得られます。
また、ソースコード中の判定順序は任意に変更することはできませんので、if
判定順序を変更してイテレータの判定を前に移動すると結果が異なります。
function arrify(value) {
if (value === null || value === undefined) {
return [];
}
if (Array.isArray(value)) {
return value;
}// 调换顺序if (typeof value[Symbol.iterator] === 'function') {
return [...value];
}
if (typeof value === 'string') {
return [value];
}
return [value];
}
最終的な印刷結果は次のようになります。
Symbol.iterator の概要
Symbol.iterator は、各オブジェクトのデフォルトのイテレータを定義します。このイテレータはfor...of...ループで使用できます。関連するドキュメントを参照して、次のイテレータをカスタマイズできます。
var myIterable = {}
myIterable[Symbol.iterator] = function* () {yield 1;yield 2;yield 3;
};
[...myIterable]
// 输出[1, 2, 3]
要約する
Arrify を要約すると次のようになります。
- まず、パラメータが配列の場合は、元のパラメータを直接返します。パラメータが
string
型の場合は、それを返します[value]
。パラメータがnull
orの場合は、それをundefined
返します[]
。パラメータが反復可能なオブジェクトの場合は、スプレッド演算子を使用して...
それを変換します。配列。 - 第二に、多くの種類の判断は、ソース コード内の反復子の判断を通じて巧みに解決されます。
- 最後に、ソースコード内の判定順序を任意に変更することはできず、そうしないと期待した効果が得られません。
やっと
最近、JavaScriptとESに関する重要な知識を合計25個、それぞれ解説・分析したnoteをまとめました。JavaScriptやES関連の知識を素早く習得し、作業効率を向上させることができます。
必要な友達は下のカードをクリックして受け取り、無料で共有できます