ホームページ  >  記事  >  ウェブフロントエンド  >  imoc の「JavaScript in a Simple Language」の arraySimilar 関数

imoc の「JavaScript in a Simple Language」の arraySimilar 関数

PHP中文网
PHP中文网オリジナル
2018-05-19 16:38:321102ブラウズ

タスク 受信した 2 つの配列が類似しているかどうかを判断するには、index.html ファイルに arraysSimilar 関数を記述してください。特定の要件: 配列内のメンバーは同じ型ですが、順序は異なる場合があります。たとえば、[1, true] は [false, 2] と似ています。 配列の長さは一貫しています。 型判定範囲は、String、Boolean、Number、unknown、null、function、date、window を区別する必要があります。 上記をすべて満たす場合は「判定結果:合格」を返し、それ以外の場合は「判定結果:不合格」を返します。

これは主に「同様の」判断を求める奇妙なリクエストです。
最初の直感は、配列を直接ソートしてから型を比較す​​ることです。しかし、JS のサイズ比較の特性により、これは誤りです。
次に、それを変更する必要があります。ここでは、(O(NlogN))を近似して辞書順に並べて、それをタイプミスとして使用できるように、各要素の型名の省略形を取得します。配列全体を近似することができます (O(N )) 配列の類似性を比較します。
2つ目の注意点は、無効なパラメータの判定ですが、最初はnullunknownを判定するために==nullを使用していました。の場合、パラメータの型が配列である必要があるため、instanceof を使用して判断します。 == null来判断nullundefined的,但是要求参数类型为数组,所以用instanceof判断。
获取类型的替代方案是用Object.prototype.toString()型を取得する代わりに、Object.prototype.toString() を使用することもできます。これにより、プロトタイプ チェーン上のオブジェクトのクラス名を正確に取得できますが、関数はオーバーライドされる可能性があるため、好ましくありません。

        /*          
        * param1 Array          
        * param2 Array         
        * return true or false         
        */function arraysSimilar(arr1, arr2) {
        // 获取单个元素的类型名简写,已经满足需求
        // 替代方案:考虑用Object.prototype.toString,但会被hack
        function getTypeNameS(item) {
        if (item === null)return 'nl';
        else if (item instanceof Date)
        return 'd';
        else if (item instanceof Window)
        return 'w';
        elsereturn (typeof item)[0];
        }
        // 获取整个数组排序后的typo
        function getArrayTypo(arr) {
        return arr.map(function (item) {
        return getTypeNameS(item);
        }).sort().join('');
        }
        // 可以判断==null,但由于要求类型为数组,那就用instanceof
        if (!(arr1 instanceof Array) || !(arr2 instanceof Array))
        return false;
        // 长度不等的情况,可以合并到typo比较中
        if (arr1.length != arr2.length)return false;
        // 对于typo使用内置的字符串比较
        return getArrayTypo(arr1) == getArrayTypo(arr2);
        }

この記事は、クリエイティブ コモンズ ライセンス クリエイティブ コモンズ 表示 - 非営利 - 継承 4.0 国際ライセンスに基づいて公開されています。引用、転載、または派生することは自由ですが、BlackStorm への帰属とこの記事へのリンクは保持する必要があります。許可なく商業目的で使用することはできません。ご質問や認可交渉などございましたら、私までご連絡ください。

以上がimoc の「JavaScript in a Simple Language」の arraySimilar 関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。