js数组知识点总结及经典笔试题
1.判断数组
这是笔试里经常会出现的知识考察点,总结一下
(1)Array.isArray()方法判断
var a=[];
Array.isArray(a) //返回true var b='hello world';
Array.isArray(b) //返回false
这个方法简单有效,缺点是IE8及以下版本浏览器不兼容
(2)用instanceof判断
var a=[];
console.log(a instanceof Array) //返回true
obj instanceof Object 判断 Object.prototype 是否存在在 obj 的原型链上,因此 a instanceof Object 也会返回 true
(3)根据对象的constuctor属性判断
var a=[];
console.log(a.constructor==Array); //返回true
在javascript中,每个对象都有一个constructor属性,它引用了初始化该对象的构造函数
通常会将这个判断方法封装为一个判断数组的方法
function isArray(obj) {
return typeof obj == 'object' && obj.constructor == Array
}
(4)终极判断方法
第二第三种方法也有列外情况,比如在跨框架iframe的时候使用页面中的数组时会失败,因为在不同的框架iframe中,创建的数组是不会相互共享其prototype属性的;当第二第三种方法也不能用时,可以使用最通用的方法 Object.prototype.toString.call()
function isArray(obj) {
return Object.prototype.toString.call(obj) == '[object Array]';
}//仅判断Array
function isType(data,type) {
return Object.prototype.toString.call(data) === "[object "+type+"]";
} //通用判断方法
方法中的call()可以换成apply(),不能直接用toString调用,因为从原型链的角度讲,所有对象的原型链最终都指向了 Object, 按照JS变量查找规则,其他对象应该也可以直接访问到 Object 的 toString方法,但是大部分的对象都实现了自身的 toString 方法,这样就可能会导致 Object 的 toString 被终止查找,因此要用 call或apply 来强制调用Object 的 toString 方法。
(5)typeof的一些坑
typeof 判断Array和null等特殊类型都会输出Object,typeof 返回值有六种可能: "number"、 "string"、 "boolean"、 "object" 、"function" 和 "undefined"。
2.数组的常用方法
(1)push()、pop()和unshift()、shift()
push(),在数组的尾部添加新元素,可同时放多个参数,原数组被改变,返回添加后的数组
pop()删除数组的最后一个元素,原数组被改变,返回被删除的项
unshift()添加新元素到数组头部,原数组被改变,返回添加后的数组
shift()删除数组的第一个元素,原数组被改变,返回被删除的项
var numArray=[2,45,12,-7,5.6,-3.4,50,132];
var arr=numArray.push(23,7);
console.log(arr);//[2,45,12,-7,5.6,-3.4,50,132,23,7]
console.log(numArray);//[2,45,12,-7,5.6,-3.4,50,132,23,7] var num=numArray.pop();
consoleog(num);//
console.log(numArray);//[2,45,12,-7,5.6,-3.4,50,132,23] var num=numArray.shift();
console.log(num);//
console.log(numArray);//[45,12,-7,5.6,-3.4,50,132,23] var arr=numArray.unshift(1,2);
console.log(numArray);//[1,2,45,12,-7,5.6,-3.4,50,132,23]
(2)sort()排序方法
sort排序,默认按字母编码规则排序,原数组被改变,返回排序后的数组
var numArray=[2,45,12,-7,5.6,-3.4,50,132];
console.log(numArray);
console.log(numArray.sort()); console.log(numArray.sort(function(a,b){return a-b;}));//按数字升序
//tip:要使回调函数中的a排在b前面,返回小于0的数
console.log(numArray);
(3)slice和splice
a.slice(),返回截取的数组,原数组不改变
1个参数a:返回数组从a索引开始的部分
2个参数a,b:返回数组从a索引开始到b(不包括b)的部分
若参数不合适导致截取部分为空,则返回空数组
b.splice(start,deleteAccount,value,...),返回截取的数组,改变原数组
1个参数:截取从start开始到末尾的数组
2个参数:截取从start开始deleteAccount位的数组
更多参数:截取后,将第三及之后的参数插入截取的位置
deleteAccount为负,返回空数组
//清空数组
//numArray.splice(0);
两个方法中表示索引的参数为负数时,识别为length+(负参数);
var a=[1,2,3];
a.slice(-2,3);//相当于a.slice(1,3)
更多数组方法 http://www.runoob.com/jsref/jsref-obj-array.html
3.相关笔试题目
(1)有一个长度未知的数组a,如果它的长度为0就把数字1添加到数组里面,否则按照先进先出的队列规则让第一个元素出队
a.length === 0 ? a.push(1) : a.shift();
(2)编写一个带参数(m,n)的函数,产生一个m个n的数组,不用循环(答案介绍了3种方法,使用时要将其他2种方法去掉)
function mnArr(m,n){
//第一种方法
var newArr=new Array(m);
newArr.fill(n);
return newArr;
//第二种,from方法
var arr = Array.from({length:m}, (v)=> n);
return arr;
//第三种,递归
var arr=[];
if(arr.length<m)
{
arr[arr.length]=n;
mnArr(m,n);
}
return arr;
}
console.log(mnArr(6,4));
(3)将数组处理成嵌套对象
示例:
[{id:1,parent:null},
{id:2,parent:1},
{id:3,parent:2}];
变成
{
id:1,
parent:null,
child:{
id:2,
parent:1,
child:{
id:3,
parent:2
}
}
}
答案:
var arr=[{id:1,parent:null},
{id:2,parent:1},
{id:3,parent:2},
{id:4,parent:3},
{id:5,parent:4}];
function change(arr,index)
{
if(index===arr.length-1)
{
return arr[index];
}
else if(index>=0)
{
arr[index].child=change(arr,index+1);
return arr[index];
//return arr[index].child=change(arr,index+1);//child一直是最后一个
}
}
console.log(change(arr,0));
代码中注释掉的那一行,直接运行的话只有一个child,原因还不清楚
运用递归的方法,从数组的第一项开始遍历,如果是数组除最后一项的其他项,就将后一项作为前一项的child
(4)将字符串数组变成整数数组
var arr = ['1', '2', '3'];
var r = arr.map(parseInt);//[1, NaN, NaN]
var m = arr.map(x=>parseInt(x));//[1, 2, 3]
js数组知识点总结及经典笔试题的更多相关文章
- 【转载】经典10道c/c++语言经典笔试题(含全部所有参考答案)
经典10道c/c++语言经典笔试题(含全部所有参考答案) 1. 下面这段代码的输出是多少(在32位机上). char *p; char *q[20]; char *m[20][20]; int (*n ...
- 【第一期百题计划进行中,快来打卡学习】吃透java、细化到知识点的练习题及笔试题,助你轻松搞定java
[快来免费打卡学习]参与方式 本期百题计划开始时间:2022-02-09,今日打卡题已在文中标红. 0.本文文末评论区打卡,需要登录才可以打卡以及查看其他人的打卡记录 1.以下练习题,请用对应的知识点 ...
- C#经典笔试题-获取字符串中相同的字符以及其个数
public Dictionary<char,int> GetStrSameAs(string str){ //将字符串转换成一个字符数组. char[] charArray=str.To ...
- JS 进阶知识点及常考面试题
将会学习到一些原理相关的知识,不会解释涉及到的知识点的作用及用法,如果大家对于这些内容还不怎么熟悉,推荐先去学习相关的知识点内容再来学习原理知识. 手写 call.apply 及 bind 函数 涉及 ...
- 经典笔试题:用C写一个函数测试当前机器大小端模式
“用C语言写一个函数测试当前机器的大小端模式”是一个经典的笔试题,如下使用两种方式进行解答: 1. 用union来测试机器的大小端 #include <stdio.h> union tes ...
- jcmd jmap应用:一个String经典笔试题的验证
笔试题: String strA = new String("123123");这一行中创建了几个String对象?? public class StringHeapCountTe ...
- 几个关于js数组方法reduce的经典片段
以下是个人在工作中收藏总结的一些关于javascript数组方法reduce的相关代码片段,后续遇到其他使用这个函数的场景,将会陆续添加,这里作为备忘. javascript数组那么多方法,为什么我要 ...
- Java 经典笔试题
这些题目对我的笔试帮助很大,有需要的朋友都可以来看看,在笔试中能遇到的题目基本上下面都会出现,虽然形式不同,当考察的基本的知识点还是相同的. 在分析中肯定有不足和谬误的地方还请大虾们能够给予及时的纠正 ...
- .Net经典笔试题
1. 简述 private. protected. public. internal 修饰符的访问权限. 答:private:私有成员,在类的内部才可以访问: protected:保护成员,该类内部和 ...
随机推荐
- HDU4513:完美队形II(Manacher)
Description Input Output Sample Input Sample Output Solution 才发现我之前不会证$Manacher$复杂度……QAQ 题意是求最长向 ...
- 【转】合格PHP工程师的知识结构
PHP的运行环境 连环境都搞不起来,就是你有多么喜欢PHP,那也是白搭,开始我们大多会使用集成环境软件例如xampp,wamp.随着知识的增加慢慢要学会自己搭建运行环境,例如 Linux(Ubuntu ...
- Day1 Mybatis初识(一)
框架 将重复的,繁琐的代码实现封装,让程序员将更多的精力放在业务的理解和分析上. 框架的作用 提高开发效率 隐藏细节 三大框架SSH --> SSM 1) 表述层: 用户 ...
- R函数-时间序列ETS参数说明
alpha\beta\gamma分别代表水平.趋势.季节分量的平滑参数α.β.γ.这三个参数我们希望接近于0,以便于更平滑,即越小越平滑.在乘法模型的情况下,参数需要非常低,否则模型会对噪声太敏感. ...
- zabbix 自定义key与参数Userparameters监控脚本输出
1.修改agent配置文件: 通过yum安装的zabbix-agent配置文件路径为/etc/zabbix/zabbix_agentd.conf 里面定义我们自己配置文件路径:Include=/etc ...
- iOS 折线图、柱状图的简单实现
首先我得感谢某位博主,非常抱歉,因为之前直接下载博主提供这篇文章的demo,然后去研究了,没记住博主的名字.再次非常感谢. 而这个dome我又修改了一些,完善了一些不美观的bug,当然还有,后面会陆续 ...
- OO第一次博客作业总结反思
使用了masteruml插件来生成类图和metrics插件分析代码 第一次作业 1.UML类图 >在第一次作业中,使用了两个类,代码中有没有使用的变量与函数,为平衡两个类的内容,我将输出函数放在 ...
- 我的react学习
基础部分 创建一个react的项目 创建一个react的项目 全局安装 react 指令 // 全局安装react (根据需要安装,不是必须的) npm i -g react // 或者 yarn - ...
- win7上代码连接hadoop出现错误 :org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray(II[BI[BIILjava/lang/String;JZ)V
在idea和eclipse中调试hadoop中hdfs文件,之前好好的,结果突然就出现java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.Na ...
- 20145234黄斐《Java程序设计》实验三—敏捷开发与xp实践
1在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能.提交截图,加上自己学号水印. public cla ...