三种方法教你如何判断数组

一· instanceof

1.1 instanceof 的内部机制是通过判断对象的原型链中是不是能找到类型的 prototype
1.2 使用 instanceof判断一个对象是否为数组,instanceof 会判断这个对象的原型链上是否会找到对应的 Array 的原型,找到返回 true,否则返回 false

[]  instanceof Array; // true

instanceof 只能用来判断对象类型,原始类型不可以。并且所有对象类型 instanceof Object 都是 true。

[]  instanceof Object; // true

二·Array.isArray()

1.1 **功能:**用来判断对象是否为数组
1.2 instanceof 与 isArray的区别
当检测Array实例时,Array.isArray 优于 instanceof ,因为 Array.isArray 可以检测出 iframes

let iframe = document.createElement('iframe');
document.body.appendChild(iframe);
xArray = window.frames[window.frames.length-1].Array;
let arr = new xArray(1,2,3); // [1,2,3]

// Correctly checking for Array
Array.isArray(arr);  // true
Object.prototype.toString.call(arr); // true
// Considered harmful, because doesn't work though iframes
arr instanceof Array; // false

1.3 Array.isArray() 与 Object.prototype.toString.call()
Array.isArray()是ES5新增的方法,当不存在 Array.isArray() ,可以用 Object.prototype.toString.call() 实现。

if (!Array.isArray) {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}

三·Object.prototype.toString.call()

每一个继承 Object 的对象都有 toString 方法,如果 toString 方法没有重写的话,会返回 [Object type],其中 type 为对象的类型。但当除了 Object 类型的对象外,其他类型直接使用 toString 方法时,会直接返回都是内容的字符串,所以我们需要使用call或者apply方法来改变toString方法的执行上下文。

const num = ['Hello','word'];
an.toString(); // "Hello,word"
Object.prototype.toString.call(num); // "[object Array]"

这种方法对于所有基本的数据类型都能进行判断,即使是 null 和 undefined 。

Object.prototype.toString.call('An') // "[object String]"
Object.prototype.toString.call(1) // "[object Number]"
Object.prototype.toString.call(Symbol(1)) // "[object Symbol]"
Object.prototype.toString.call(null) // "[object Null]"
Object.prototype.toString.call(undefined) // "[object Undefined]"
Object.prototype.toString.call(function(){}) // "[object Function]"
Object.prototype.toString.call({name: 'An'}) // "[object Object]"

Object.prototype.toString.call() 常用于判断浏览器内置对象时

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 题目描述: 在平面直角坐标系上,有 $N$ 个点,第 $i$ 个点的坐标是 $(x_i, y_i)$,请你计算有多少个三元组 $(i,j,k)$ 能够组成一个等腰直角三角形,其中 $1\le i<j<k\le N$。 输入格式: 第一行包含整数 $N$。 接下来 $N$ 行,每行包含两个整数 $x_i$ 和 $y_i$,表示第 $i$ 个点的坐标。 输出格式: 输出一个整数表示答案,由于答案可能很大,请输出对 $10^9+7$ 取模后的答案。 数据范围: $3\le N\le 500$ $0\le x_i, y_i\le 10^9$ 输入样例: 4 0 0 0 1 1 1 1 0 输出样例: 1 题目分析: (1) 先求出每个点到各个点的距离 $dis$ ,再进行两重循环,求等腰直角三角形的数量,最差时间复杂度为 $O(N^3)$。 (2) 直接进行两重循环,枚举 $i$ 和 $j$,判断是否存在满足 $x_i=x_k,x_j=y_k$ 或 $x_i=y_k,x_j=x_k$ 的 $k$,如果 $k$ 存在,则符合要求,时间复杂度为 $O(N^2)$。 (3) 对所有的点按照 $x$ 坐标从小到大排序。对于每个点,只需要找到 $x$ 坐标与其相同的点,并计算相同 $x$ 坐标的点之间,坐标差为 $y$ 的数量。计算等腰直角三角形的数量时,枚举相同 $x$ 坐标的两个点 $A(x_a, y_a)$ 和 $B(x_b, y_b)$,那么 C 点的坐标可选的只有两个,分别是 $C_1(x_a, y_b)$ 和 $C_2(x_b, y_a)$,如果都存在,则代表 $A,B,C_1$ 和 $A,B,C_2$ 都是等腰直角三角形。时间复杂度 $O(N^2)$。 第一种方法过不了最后两个测试点,因此选择第三种方法。 C++ 代码: ### 回答2: 要制作一个数三角形的码题集,首先需要确定数三角形的规则和题目类型。数三角形是以数字排列形成的三角形,可以通过加法、减法、乘法或除法得出特定的数字。下面是一个示例: 题目类型: 1. 加法数三角形:在每个数字下方,需要将其上方两个数字相加得出结果。 2. 乘法数三角形:在每个数字下方,需要将其上方两个数字相乘得出结果。 3. 除法数三角形:在每个数字下方,需要将其上方两个数字相除得出结果。 制作步骤: 1. 确定数三角形的行数和起始数字。例如,可以从第一行开始,起始数字为1。 2. 按数三角形规则,逐行计算出每个数字,并将其填入相应位置。 3. 根据题目类型,计算每个数字下方的结果,并在每个数字下方标注答案。 4. 检查每行和每列的数字是否符合数三角形规则,并调整数字以确保正确性。 5. 设计封面和页码,将每个数三角形以题目编号进行标注。 6. 将所有题目整理成册,添加适当的标题和页眉,确保整体的美观和易读性。 7. 检查码题集中每个数三角形的难度和长度是否适合目标学生群体,进行必要的调整。 8. 最后,根据需求,可以添加解答部分或留白供学生填写答案。 制作一个数三角形的码题集需要耐心和细心,确保每个数字和答案的正确性,同时也要注意题目的难度和学生的接受程度。通过合理的设计和精心的制作,可以有效提高学生的数学练习和思考能力。 ### 回答3: 要做出一个码题集中数三角形,首先需要理解数三角形的概念。数三角形是由数字组成的三角形图案。下面我将给出一些步骤来帮助你完成这个任务。 1. 定义三角形的行数和列数。确定你想要的数字三角形的形状和大小。 2. 创建一个空的三角形矩阵。使用二维数组或其他适合的数据结构来保存数字。 3. 填充三角形的边界。将三角形的边界元素设为所需的数字。通常,第一行和最后一行都是由1组成的。 4. 计算内部数字。从第二行开始,每一个数字都是由上一行的两个数字相加得到的。根据这一规律,逐行计算并填充三角形的内部数字。 5. 输出数字三角形。使用循环语句遍历三角形的行和列,将各个元素输出到屏幕上。确保使用适当的格式对齐数字。 这些步骤可以帮助你完成一个简单的数三角形。但是,根据你的具体需求和技术水平,你可以进一步扩展和优化代码。希望这个回答对你有所帮助,祝你成功完成你的码题集中的数三角形!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值