日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Javascript類型判斷相關例題及解析

瀏覽:24日期:2023-10-17 09:55:29

題目:

請在index.html文件中,編寫arraysSimilar函數,實現判斷傳入的兩個數組是否相似。具體需求:

1. 數組中的成員類型相同,順序可以不同。例如[1, true] 與 [false, 2]是相似的。

2. 數組的長度一致。

3. 類型的判斷范圍,需要區分:String, Boolean, Number, undefined, null, 函數,日期, window.

當以上全部滿足,則返回'判定結果:通過',否則返回'判定結果:不通過'。

一、測試用例

var result=function(){ //以下為多組測試數據 var cases=[{ arr1:[1,true,null], arr2:[null,false,100], expect:true},{ arr1:[function(){},100], arr2:[100,{}], expect:false},{ arr1:[null,999], arr2:[{},444], expect:false},{ arr1:[window,1,true,new Date(),'hahaha',(function(){}),undefined], arr2:[undefined,(function(){}),'okokok',new Date(),false,2,window], expect:true},{ arr1:[new Date()], arr2:[{}], expect:false},{ arr1:[window], arr2:[{}], expect:false},{ arr1:[undefined,1], arr2:[null,2], expect:false},{ arr1:[new Object,new Object,new Object], arr2:[{},{},null], expect:false},{ arr1:null, arr2:null, expect:false},{ arr1:[], arr2:undefined, expect:false},{ arr1:'abc', arr2:'cba', expect:false}];//使用for循環, 通過arraysSimilar函數驗證以上數據是否相似,如相似顯示“通過”,否則'不通過',所以大家要完成arraysSimilar函數,具體要求,詳見任務要求。for(var i=0;i<cases.length;i++){if(arraysSimilar(cases[i].arr1,cases[i].arr2)!==cases[i].expect) { document.write('不通過!case'+(i+1)+'不正確!arr1='+JSON.stringify(cases[i].arr1)+', arr2='+JSON.stringify(cases[i].arr2)+' 的判斷結果不是'+cases[i].expect); return false;} } return true; }(); document.write('判定結果:'+(result?'通過':'不通過'));

這個文件為testData.js。主要任務是完成arraysSimilar函數。

二、arraySimilar函數

1、我的寫法

1、判斷2個參數是否都是數組,不是就返回false;

2、判斷2個數組長度是否一致,不是直接返回fasle;

3、新建2個臨時數組temp1,temp2并初始化為0,用來存放arr1和arr2中各種類型的個數。

var temp1 = [0, 0, 0, 0, 0, 0, 0, 0];var temp2 = [0, 0, 0, 0, 0, 0, 0, 0];

4、遍歷2個arr1和arr2,每遍歷一個元素,將對應類型加1。

5、完成arr1和arr2的遍歷后,通過temp1.toString()和temp2.toString()是否相等得出2個數組是否相似。

<!DOCTYPE HTML><html><meta charset='utf-8'><head> <meta http-equiv='Content-Type' content='text/html; charset=gb18030'> <title>Untitled Document</title></head><body> <script type='text/javascript'> /* * param1 Array * param2 Array * return true or false */ function arraysSimilar(arr1, arr2) { console.log('arr1為' + arr1); console.log('arr2為' + arr2); if (!(arr1 instanceof Array) || !(arr2 instanceof Array)) { document.write(false + '<br/>'); return false; } else if (arr1.length != arr2.length) { document.write(false + '<br/>'); return false; } var temp1 = [0, 0, 0, 0, 0, 0, 0, 0]; var temp2 = [0, 0, 0, 0, 0, 0, 0, 0]; //初始化temp1 for (i = 0; i < arr1.length; i++) { console.log('arr1的第' + i + '個值為' + arr1[i]); switch (jsType(arr1[i])) {case 'String': temp1[0]++; break;case 'Boolean': temp1[1]++; break;case 'Number': temp1[2]++; break;case 'Undefined': temp1[3]++; break;case 'Null': temp1[4]++; break;case 'Function': temp1[5]++; break;case 'Date': temp1[6]++; break;case 'Window': temp1[7]++; break; } console.log('arr2的第' + i + '個值為' + arr2[i]); //初始化temp2 switch (jsType(arr2[i])) {case 'String': temp2[0]++; break;case 'Boolean': temp2[1]++; break;case 'Number': temp2[2]++; break;case 'Undefined': temp2[3]++; break;case 'Null': temp2[4]++; break;case 'Function': temp2[5]++; break;case 'Date': temp2[6]++; break;case 'Window': temp2[7]++; break; } } //判斷temp1和temp2是否相等 if (temp1.toString() === temp2.toString()) { document.write(true + '<br/>'); return true; } else { document.write(false + '<br/>'); return false; } } //返回參數的javascript類型 function jsType(arg) { //判斷字符串 if (typeof arg == 'string') { console.log('string'); return 'String'; } //判斷Boolean if (typeof arg == 'boolean') { console.log('boolean'); return 'Boolean'; } //判斷Number if (typeof arg == 'number') { console.log('Number'); return 'Number'; } //判斷Undefined if (typeof arg == 'undefined') { console.log('Undefined'); return 'Undefined'; } //判斷Null(不考慮IE8以下) //看了答案發現直接=== null判斷就好了 if (Object.prototype.toString.apply(arg) == '[object Null]') { console.log('Null'); return 'Null'; } //判斷Function if (typeof arg == 'function') { console.log('Function'); return 'Function'; } //判斷日期 if (arg instanceof Date) { console.log('Date'); return 'Date'; } //判斷window //看了答案發現直接=== window 判斷就好了 if (arg instanceof Window) { console.log('window'); return 'Window'; } } </script> <script src='http://www.b3g6.com/bcjs/testData.js'></script></body></html>

雖然代碼略粗糙,但是功能完成了。網上看了其他人的答案確實不同的人做法不一樣,有些值得借鑒的地方。

2、其他答案

建一個類型對象數組obj,初始化為零,arr1遍歷時每個元素對應的類型加一,arr2遍歷時每個元素對應的類型減一,最終判斷obj里所有鍵的值都為0即相似數組。

function check(i){ //除了function 其他的引用類型用instanceof來判定 if(i instanceof Date){ return ’date’; } else if(i instanceof Window){ return ’window’; } // typeof可以判斷基本類型(number string boolean null(typeof 返回object) undefined )和引用類型的function類型 if(typeof i === ’number’)return ’number’; else if(typeof i === ’string’)return ’string’; else if(typeof i === ’boolean’)return ’boolean’; else if(typeof i === ’function’)return ’function’; //typeof null 返回 object else if(typeof i === ’object’){ if(i === null){return ’null’; }else{return ’object’; } } else if(typeof i === ’undefined’){ return ’undefined’; } } function arraysSimilar(arr1, arr2){ if(!arr1||!arr2){return false;} if(!(arr1 instanceof Array )||!(arr2 instanceof Array))return false; if(arr1.length!=arr2.length)return false; var obj={ ’number’:0, ’string’:0, ’boolean’:0, ’undefined’:0, ’null’:0, ’function’:0, ’date’:0, ’object’:0, ’window’:0}; for(var i=0;i<arr1.length;i++){ var r1=check(arr1[i]); var r2=check(arr2[i]); obj[r1]++; obj[r2]--; } for(var o in obj){ if(obj[o]!=0)return false; } return true; }

還有一個答案,差不多算標準答案,當然這種題也沒有標準答案。和上個答案的差別是,用map(在js中也就是對象)存放數據類型和次數,這個map初始化為{},在后面動態生成的。

/** * String, Boolean, Number, undefined, null, 函數,日期, window */function arraysSimilar(arr1, arr2) { // 判斷參數,確保arr1, arr2是數組,若不是直接返回false if (!(arr1 instanceof Array) || !(arr2 instanceof Array)) { return false; } // 判斷長度 if (arr1.length !== arr2.length) return false; var i = 0, n = arr1.length, countMap1 = {}, // 用來計算數組元素數據類型個數的map,key是TYPES中的類型字符串,value是數字表示出現次數。 countMap2 = {}, t1, t2, TYPES = [’string’, ’boolean’, ’number’, ’undefined’, ’null’, ’function’, ’date’, ’window’]; // 因為是無序的,用一個對象來存儲處理過程。key為類型, value為該類型出現的次數。 // 最后校驗:若每一種數據類型出現的次數都相同(或都不存在),則證明同構。 for (; i < n; i++) { t1 = typeOf(arr1[i]); t2 = typeOf(arr2[i]); if (countMap1[t1]) { countMap1[t1]++; } else { countMap1[t1] = 1; } if (countMap2[t2]) { countMap2[t2]++; } else { countMap2[t2] = 1; } } // 因為typeof只能判斷原始類型,且無法判斷null(返回'object'),所以自己寫typeof方法擴展。 function typeOf(ele) { var r; if (ele === null) r = ’null’; // 判斷null else if (ele instanceof Array) r = ’array’; // 判斷數組對象 else if (ele === window) r = ’window’; // 判斷window else if (ele instanceof Date) r = ’date’ // 判斷Date對象 else r = typeof ele; // 其它的,使用typeof判斷 return r; } for (i = 0, n = TYPES.length; i < n; i++) { if (countMap1[TYPES[i]] !== countMap2[TYPES[i]]) { return false; } } return true;}

還有一個比較簡潔也好理解的解法

<script type='text/javascript'> /* * param1 Array * param2 Array * return true or false */ function type(a){ return a === null ? ’[object Null]’:Object.prototype.toString.apply(a); //hack ie678 } function arraysSimilar(arr1, arr2){ if(!Array.isArray(arr1) || !Array.isArray(arr2) ||arr1.length!=arr2.length){return false;} var arr3=[]; var arr4=[]; var x; for(var i in arr1){arr3.push(type(arr1[i]));arr4.push(type(arr2[i])); } if(arr3.sort().toString()==arr4.sort().toString()){return true; }else{return false; } } </script>

還有一個精妙的解法,我對這種不感興趣,沒仔細看。

var global = window;function arraysSimilar(arr1, arr2){ return (arr1 instanceof Array && arr2 instanceof Array) && JSON.stringify(arr1.map(function(v) { return null === v ? '☀' : (v instanceof Date ? '❤' : (v === global ? '❀' : typeof v)); }).sort()) === JSON.stringify(arr2.map(function(v) { return null === v ? '☀' : (v instanceof Date ? '❤' : (v === global ? '❀' : typeof v)); }).sort());}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品视区| 久久久久免费av| 日本亚洲不卡| 精品日韩在线| 婷婷成人在线| 91成人福利| 伊人久久成人| 免费在线看一区| 国产伊人久久| 亚洲人妖在线| 国产欧美视频在线| 国产成人精品一区二区免费看京| 亚洲福利免费| 精品国产中文字幕第一页| 天堂va欧美ⅴa亚洲va一国产| 国产日韩欧美一区在线| 婷婷中文字幕一区| av在线最新| 国产精品中文字幕亚洲欧美| 99综合视频| 久久国产电影| 亚洲高清久久| 亚洲精品精选| 亚洲精品福利| 免费视频最近日韩| 欧美成人精品| 欧美日韩高清| 国产精品成久久久久| 日韩av黄色在线| 国产精品啊啊啊| 国产精品欧美三级在线观看| 欧美在线观看天堂一区二区三区| 日本高清久久| 国产精品久久久免费| 国产欧美日韩一区二区三区在线| 日韩精品一区二区三区中文| 蜜臀久久久99精品久久久久久| 国产农村妇女精品一二区| 蜜桃视频欧美| 欧美日韩视频一区二区三区| 久久久久网站| 男女激情视频一区| 在线精品观看| 国产日本亚洲| 欧美一级鲁丝片| 欧美丰满日韩| 日韩精品一二区| 国产三级一区| 久久国产精品成人免费观看的软件| 尤物网精品视频| 国产精品一区二区精品视频观看 | 国产一区二区三区四区五区| 国产亚洲第一伦理第一区| 99在线|亚洲一区二区| 国语精品一区| 国产乱码精品一区二区三区四区 | 日韩88av| 久久九九99| 亚洲免费福利一区| 里番精品3d一二三区| 日韩动漫一区| 久久亚洲国产精品一区二区| 石原莉奈在线亚洲二区| 麻豆精品蜜桃视频网站| 成人va天堂| 在线日韩成人| 红桃视频亚洲| 一区二区电影| 日韩国产欧美| 日本少妇一区二区| 久久精选视频| 国产精品一区亚洲| 欧美日韩四区| 精品久久免费| 丝袜亚洲精品中文字幕一区| 国产aa精品| 日韩黄色在线观看| 日本不卡视频一二三区| 中文字幕高清在线播放| 国产欧美日韩一区二区三区四区 | 国产精品二区不卡| 日韩精品社区| 中文字幕亚洲在线观看| 五月精品视频| 亚洲性色视频| 欧美特黄一区| 日韩欧美2区| av中文资源在线资源免费观看| 国产中文欧美日韩在线| 欧美激情网址| 久久久久蜜桃| 日本成人在线一区| 亚洲二区免费| 国产精品jk白丝蜜臀av小说| 国产福利一区二区精品秒拍 | 国产日韩一区二区三免费高清| 久久精品电影| 久久精品国产99久久| 影院欧美亚洲| 久久精品1区| 日本亚洲最大的色成网站www| 欧美成人日韩| 午夜久久av| 福利一区二区免费视频| 国产精品mm| 麻豆视频在线观看免费网站黄 | 日韩高清不卡在线| 电影91久久久| 国产精品久久久久久模特| 日韩一级网站| 日韩高清不卡一区二区| 亚洲国内精品| 日韩成人a**站| 亚洲激情五月| 日韩av成人高清| 亚洲国产欧美日本视频| 青草国产精品| 欧美手机在线| 日韩精品诱惑一区?区三区| 国产精品久久久一区二区| 高潮久久久久久久久久久久久久| 偷拍欧美精品| 中文字幕av一区二区三区四区| 久久三级毛片| 久久久久美女| 蜜桃视频一区二区三区| 日韩电影在线视频| 久久精品xxxxx| 亚洲专区视频| 91久久久久| 国产成人久久精品麻豆二区| 亚洲最大av| 夜鲁夜鲁夜鲁视频在线播放| 伊人成人在线视频| 精品一二三区| 在线视频亚洲| 亚洲天堂av影院| 国产极品一区| 国产精品第十页| 麻豆极品一区二区三区| 久久一区亚洲| 国产福利电影在线播放| 亚洲免费影院| 中文字幕在线视频久| 伊人久久高清| 日韩欧美中文字幕一区二区三区| 久久精品影视| 精品国产网站| 色一区二区三区四区| 国产精品xvideos88| 国产精品一国产精品| 成年男女免费视频网站不卡| 亚洲精品影视| 亚洲高清毛片| аⅴ资源天堂资源库在线| 久久天堂精品| 日产精品一区| 国产乱人伦丫前精品视频| 国产欧美三级| 吉吉日韩欧美| 精品一区二区三区中文字幕视频 | 欧美成人精品三级网站| 亚洲+小说+欧美+激情+另类| 亚洲精品网址| 午夜天堂精品久久久久| 日韩av午夜在线观看| 久久影院一区| 日韩午夜av在线| 美女网站一区| 精品淫伦v久久水蜜桃| 福利片在线一区二区| 天堂成人免费av电影一区| 久久国产小视频| 亚洲一区二区三区无吗| 伊人久久成人| 日韩理论视频| 色在线中文字幕| 欧美专区一区| 日韩精品一区二区三区免费视频| 少妇高潮一区二区三区99| 老司机精品在线| 中文一区一区三区免费在线观| 日本综合视频| 日韩欧美1区| 一区免费视频| 美腿丝袜亚洲三区| 国产精品丝袜xxxxxxx| 在线 亚洲欧美在线综合一区| 黄色在线网站噜噜噜| 日韩中文字幕一区二区高清99| 国产精品99免费看| 日韩欧美一区二区三区在线视频 | 最近高清中文在线字幕在线观看1| 亚洲精品一区二区妖精| 国产精品地址| 久久aⅴ国产紧身牛仔裤| 国产丝袜一区| 日韩中文欧美| 日韩精品视频网站| 图片区亚洲欧美小说区|