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数组知识点总结及经典笔试题的更多相关文章

  1. 【转载】经典10道c/c++语言经典笔试题(含全部所有参考答案)

    经典10道c/c++语言经典笔试题(含全部所有参考答案) 1. 下面这段代码的输出是多少(在32位机上). char *p; char *q[20]; char *m[20][20]; int (*n ...

  2. 【第一期百题计划进行中,快来打卡学习】吃透java、细化到知识点的练习题及笔试题,助你轻松搞定java

    [快来免费打卡学习]参与方式 本期百题计划开始时间:2022-02-09,今日打卡题已在文中标红. 0.本文文末评论区打卡,需要登录才可以打卡以及查看其他人的打卡记录 1.以下练习题,请用对应的知识点 ...

  3. C#经典笔试题-获取字符串中相同的字符以及其个数

    public Dictionary<char,int> GetStrSameAs(string str){ //将字符串转换成一个字符数组. char[] charArray=str.To ...

  4. JS 进阶知识点及常考面试题

    将会学习到一些原理相关的知识,不会解释涉及到的知识点的作用及用法,如果大家对于这些内容还不怎么熟悉,推荐先去学习相关的知识点内容再来学习原理知识. 手写 call.apply 及 bind 函数 涉及 ...

  5. 经典笔试题:用C写一个函数测试当前机器大小端模式

    “用C语言写一个函数测试当前机器的大小端模式”是一个经典的笔试题,如下使用两种方式进行解答: 1. 用union来测试机器的大小端 #include <stdio.h> union tes ...

  6. jcmd jmap应用:一个String经典笔试题的验证

    笔试题: String strA = new String("123123");这一行中创建了几个String对象?? public class StringHeapCountTe ...

  7. 几个关于js数组方法reduce的经典片段

    以下是个人在工作中收藏总结的一些关于javascript数组方法reduce的相关代码片段,后续遇到其他使用这个函数的场景,将会陆续添加,这里作为备忘. javascript数组那么多方法,为什么我要 ...

  8. Java 经典笔试题

    这些题目对我的笔试帮助很大,有需要的朋友都可以来看看,在笔试中能遇到的题目基本上下面都会出现,虽然形式不同,当考察的基本的知识点还是相同的. 在分析中肯定有不足和谬误的地方还请大虾们能够给予及时的纠正 ...

  9. .Net经典笔试题

    1. 简述 private. protected. public. internal 修饰符的访问权限. 答:private:私有成员,在类的内部才可以访问: protected:保护成员,该类内部和 ...

随机推荐

  1. 【译文】Web Service 众所周知的问题

    1. 什么是web service Web Service是一种网络程序间的通信方式,它允许开发者用API方式暴露自己的业务逻辑功能,这样,其他开发者可以使用它 2. Web Service的特性 互 ...

  2. Ubuntu中文目录文件夹改为英文

    打开终端,在终端中输入命令: export LANG=en_US xdg-user-dirs-gtk-update 在弹出的窗口中询问是否将目录转化为英文路径,同意并关闭. 在终端中输入命令: exp ...

  3. 2733. [HNOI2012]永无乡【平衡树-splay】

    Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...

  4. 多线程之synchronized

    Java并发编程:synchronized 虽然多线程编程极大地提高了效率,但是也会带来一定的隐患.比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相同的数据.今天我们就 ...

  5. C语言程序设计I—第六周教学

    第六周教学总结(8/10-14/10) 教学内容 第二章 用C语言编写程序 2.4 输出华氏-摄氏温度转换表 课前准备 在蓝墨云班课发布资源: PTA:2018秋第六周作业 分享码:88C28D89E ...

  6. Linux入门基础(三):Linux用户及权限基础

    用户基础 用户和组 每个用户都拥有一个userid 每个用户都属于一个主组,属于一个或多个附属组 每个组拥有一个groupid 每个进程以一个用户身份运行,受该用户可访问资源限制 每个可登陆用户拥有一 ...

  7. Angular4 自制打地鼠游戏

    前端工程师新手一枚,之前一直做些小设计,以及静态页面的编写工作.刚刚接触 Angular 没有多久,四个月前对于 Javascript也只是会写 alert 之流,现在进步算是很大,下面是自制的打地鼠 ...

  8. HTML5基础知识总结(一)

    新增的标签和属性 1.结构标签 article section aside nav header footer hgroup figure address 2.媒体标签 video audio emb ...

  9. python抠图与pip install PIL报错

    窗口命令pip install PIL(python3.6+selenium——2.53.1+pycharm) from PIL import Image from selenium import w ...

  10. 8.Generics 泛型(Dart中文文档)

    这篇翻译的不好 如果你看API文档中的数组篇,你会发现类型一般写成List.<...>的写法表示通用类型的数组(未明确指定数组中的数据类型).通常情况泛型类型用E,T,S,K,V表示. W ...