Maison  >  Article  >  interface Web  >  Une fonction arraySimilar sur "JavaScript in a Simple Language" d'imooc

Une fonction arraySimilar sur "JavaScript in a Simple Language" d'imooc

PHP中文网
PHP中文网original
2018-05-19 16:38:321102parcourir

Tâche Veuillez écrire la fonction arraysSimilar dans le fichier index.html pour déterminer si les deux tableaux entrants sont similaires. Besoins spécifiques : Les membres du tableau sont du même type, mais l’ordre peut être différent. Par exemple, [1, true] est similaire à [false, 2]. La longueur des tableaux est cohérente. La plage de jugement de type doit être distinguée : chaîne, booléen, nombre, non défini, nul, fonction, date, fenêtre. Lorsque toutes les conditions ci-dessus sont satisfaites, « Résultat du jugement : Réussite » est renvoyé, sinon « Résultat du jugement : Échec » est renvoyé.

C'est une exigence étrange, demandant principalement un jugement « similaire ».
Le premier réflexe est de trier directement le tableau, puis de comparer les types. Mais en raison de la fonctionnalité de comparaison de taille de JS, c'est faux.
Ensuite, vous devez le changer. Ici, je prends l'abréviation du nom de type de chaque élément. Cela peut se rapprocher de (O(NlogN)) dans l'ordre du dictionnaire, puis de l'utiliser comme faute de frappe. l'ensemble du tableau. Approximativement (O(N)) compare les tableaux pour voir s'ils sont similaires.
Le deuxième point à noter est le jugement des paramètres invalides. Initialement, == null était utilisé pour juger null et undefined, mais le type de paramètre doit être un tableau, donc instanceof a été utilisé pour juger. juge.
Une alternative à l'obtention du type consiste à utiliser Object.prototype.toString(), qui peut obtenir avec précision le nom de classe de l'objet sur la chaîne de prototypes, mais la fonction peut être remplacée, elle n'est donc pas préférée.

        /*          
        * 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);
        }

Cet article est publié sous le contrat de licence Creative Commons Attribution-Pas d'utilisation commerciale-Partage dans les mêmes conditions 4.0 International Vous êtes invités à le citer, à le réimprimer ou à le dériver, mais vous devez conserver l'attribution BlackStorm et l'attribution. lien vers cet article et ne peut être utilisé à des fins commerciales sans autorisation. Si vous avez des questions ou des négociations d’autorisation, veuillez me contacter.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn