<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>js 检测两个数组是否相似</title></head><body> <script> //数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的。 //数组的长度一致。 //类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window. function arraysSimilar(arr1, arr2){ //判断边界 if (!(arr1 instanceof Array) || !(arr2 instanceof Array)) { return false; } //判断长度 if (arr1.length != arr2.length) return false; var i = 0, n = arr1.length, countMap1 = {}, countMap2 = {}, t1, t2, TYPES = ['string', 'boolean', 'number', 'undefined', null, 'function', 'date', 'window']; 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; } } function typeOf(ele){ var r; if (ele === null) r = 'null'; else if(ele instanceof Array) r = 'array'; else if(ele === window) r = 'window'; else if(ele instanceof Date) r = 'date'; else r = typeof ele; return r; } for (i = 0; i < TYPES.length; i++) { if (countMap1[TYPES[i]] != countMap2[TYPES[i]]) return false; } return true; } document.write(arraysSimilar([1,true], [false, 2])); </script></body></html>
数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的数组的长度一致类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window.
新闻热点
疑难解答