判断两个数组是否相似 (arraysSimilar)
- content
{:toc}
题目
题目来自 慕课网 JavaScript 深入浅出 1-6 编程练习
请在 index.html 文件中,编写 arraysSimilar 函数,实现判断传入的两个数组是否相似。具体需求:
- 数组中的成员类型相同,顺序可以不同。例如 [1, true] 与 [false, 2] 是相似的。
- 数组的长度一致。
- 类型的判断范围,需要区分: String, Boolean, Number, undefined, null, 函数, 日期, window.
当以上全部满足,则返回“判定结果:通过”,否则返回“判定结果:不通过”。
题目给出了 index.html 如下:
1 |
|
其中 testData.js 是测试用例,代码如下
1 | var result = function() { |
解答
各位读者在看解答前也可以自己考虑一下,看看咱们的想法是否一致,期待您在本文的留言。
思路
通过观察测试用例,可以发现,最后三个用例有不是数组的。所以我们可以先判断传入的参数是否是数组。
又因为题目中要求数组长度必须一致,这也是第二个限制条件。
最后再区分具体的类型。
理清思路我们可以分为以下步骤:
- 判断传入的参数是否为数组 (使用
instanceof
方法) - 检查两个数组长度是否一致
- 分别判断数组内元素的基本数据类型 (使用
typeof
方法) - 因为
typeof
只能检查基本数据类型,对于null
,Date
,window
返回的都是object
,所以使用Object.prototype.toString.apply()
来检查这些对象类型,其返回值为:'[object Null]'
,'[object Date]'
,'[object global]'
- 分别比较每个数组内元素的各种类型的个数,如果都相等,那么这两个数组是相似的。
具体实现代码
JavaScript代码如下
1 | /** |
总结
- 上述代码完美的跑完所有的测试用例,读者 点击这里查看结果,并且可以按
f12
看 Console 信息, 里面有代码的执行过程。 - 当然你也可以复制本文的 JavaScript 代码,在 慕课网的习题 下跑一下,也可以看到
判定结果:通过
的结果 - 完整源代码在我的 GitHub javascript-test/arraysSimilar/ 仓库中
- 其实我的代码逻辑并不复杂,有点空间换时间的感觉,执行效率应该是较高的。没有用 JavaScript 封装的任何函数,完全是自己写的。其实代码除去
console.log()
也并没有多少行。 - 各位读者有什么好的想法欢迎留言交流!
评论
TwikooValine