js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的

时间:2021-12-14 08:46:36

题目:

  给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致。

js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的

 假设已经写好了Array.prototype.sameStructureAs ,会有下面的结果:

  

[1,1].sameStructureAs([2,2])
// true [1,[1,1]].sameStructureAs([2,[2,2]])
// true [1,[1]].sameStructureAs([[2],2])
// false [[],[]].sameStructureAs([[],[]])
// true

看到上面的代码返回值,或许你就明白了。sameStructureAs方法的功能就如此之简单。

那么, 该怎么实现呢,如下:

Array.prototype.sameStructureAs = function (other) {
// Return 'true' if and only if 'other' has the same
// nesting structure as 'this'. // Note: You are given a function isArray(o) that returns
// whether its argument is an array. if (! (other instanceof Array) ) return false; // 传入的不是数组返回false // 这个函数返回一个序列号
function count (arr) {
// 第一次调用添加一个index属性
if (typeof count.index === 'undefined') {
count.index = 0
}
var resStr = '' // 返回的序列号 if (!arr.length) resStr += count.index // 如果传入数组为空,序列号为当前index属性值 for (var i = 0; i < arr.length; i++) {
if (typeof arr[i] !== 'object') {
resStr += count.index // 如果这个元素不是数组,序列号为当前index属性值
} else {
count.index++ // 将index属性值+1,是为了进入下一层数组
resStr += count(arr[i]) // 返回当前传入数组的序列号
count.index-- //这里 -1 是回到当前层次中,继续遍历
}
}
return resStr
} return count(this) === count(other) }

思路是这样的:

  因为这仅仅判断数组,并没有其他引用类型的对象,如RegExp、Date等,所以就容易多了。

  我先设定数组第一层的非数组元素的序列号为0 ,也就是说 [1,1,1] 序列号是 [0,0,0],因此返回的数组序列号为'000',同样[2,2,2]也返回'000'

  每进入一层数组前,那么元素序列号就 +1,该循环完成并返回值后,元素序列号 - 1, 回到当前层次的数组中继续遍历。

  注: 如果当前数组为空,数组序列号应该为当前数组层次,这是为了判断在所有元素师空数组时的情况。如[[],[]]返回'11'、[[[],[]]]返回'22'。

js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的的更多相关文章

  1. JS合并两个数组的方法

    JS合并两个数组的方法 我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况.比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合 ...

  2. JS取出两个数组的不同或相同元素

    JS合并两个数组的方法 我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况.比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合 ...

  3. 给定两个数组,这两个数组是排序好的,让你求这两个数组合到一起之后第K大的数。

    题目:给定两个数组,这两个数组是排序好的,让你求这两个数组合到一起之后第K大的数. 解题思路: 首先取得数组a的中位数a[aMid],然后在b中二分查找a[aMid],得到b[bMid],b[bSt] ...

  4. JS 比较两个数组是否相等 是否拥有相同元素

    Javascript怎么比较两个数组是否相同?JS怎么比较两个数组是否有完全相同的元素?Javascript不能直接用==或者===来判断两个数组是否相等,无论是相等还是全等都不行,以下两行JS代码都 ...

  5. 探讨JS合并两个数组的方法

    我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况. 比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合并成一个.方法如下: ...

  6. 转:探讨JS合并两个数组的方法

    我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况. 比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合并成一个.方法如下: ...

  7. JS比较两个数组是否相等 是否拥有相同元素

    Javascript怎么比较两个数组是否相同?JS怎么比较两个数组是否有完全相同的元素?Javascript不能直接用==或者===来判断两个数组是否相等,无论是相等还是全等都不行,以下两行JS代码都 ...

  8. &lbrack;转&rsqb; 探讨JS合并两个数组的方法

    我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况. 比如: 1 2 var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合并成一个.方法 ...

  9. js 合并两个数组对象

    项目背景是合并a = [{name:'dede'},{name:'jenny'}],  b = [{age:18},{age:19}]  合并成[{name:'dede',age:18},{name: ...

随机推荐

  1. JavaScript权威指南 - 对象

    JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删. JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等. JavaScript对象除了可以保持自 ...

  2. epub电子书--目录结构介绍

    epub电子书简介 epub全称为Electronic Publication的缩写,意为:电子出版, epub于2007年9月成为国际数位出版论坛(IDPF)的正式标准,以取代旧的开放Open eB ...

  3. Markdown入门 学习

    Markdown简介 Markdown是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面. --* 正如您在阅读的这份文档,它使用简单的符号标识不 ...

  4. &lbrack;bzoj1452&rsqb;&lbrack;JSOI2009&rsqb;Count&lpar;树状数组&rpar;

    1452: [JSOI2009]Count Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2057  Solved: 1216[Submit][Stat ...

  5. C99标准的新特性

    C语言标准的发展 C语言的发展历史大致上分为4个阶段:Old Style C.C89.C99和C11. C89是最早的C语言规范,于1989年提出,1990年先由ANSI(美国国家标准委员会,Amer ...

  6. Arduino 模拟信号的读入并转化为0-5V电压

    int ledIn = A0; void setup(){ Serial.begin(9600); } void loop(){ int sensorValue = analogRead(ledIn) ...

  7. 已管理员身份从cmd框进入mysql,及常用的简单操作&excl;

    在命令框中操作mysql已管理员的身份进入操作权限较高,已普通用户进入cmd框也可对mysql进行操作,不过一般建议用管理员身份进入. 1.启动MYSQL Notifier 2.已管理员身份进入cmd ...

  8. JAVA:IDEA使用Junit(3)

    1.配置 File ——> Project Structure ——> Libraries ——> + ——>搜索Junit类库 确认ok即可 2.编辑项目 选择创建 配置生成 ...

  9. &lbrack;OpenCV-Python&rsqb; OpenCV 中的图像处理 部分 IV &lpar;二)

    部分 IVOpenCV 中的图像处理 OpenCV-Python 中文教程(搬运)目录 16 图像平滑 目标 • 学习使用不同的低通滤波器对图像进行模糊 • 使用自定义的滤波器对图像进行卷积(2D 卷 ...

  10. 多网卡环境下Eureka服务注册IP选择问题

    一.问题场景 服务器上分别配置了eth0, eth1和eth2三块网卡,只有eth1的地址可供其它机器访问,eth0和eth2的 IP 无效.在这种情况下,服务注册时Eureka Client会自动选 ...