js---常见数组面试题

JS常见面试题

一.数组创建方式:

使用字面量的方式 var arr=[] ; (最常用)
使用数组构造函数 var arr=new Array();
使用数组表达式 var arr=Array();

二.如何确认变量类型是数组

1.Array.isArray直接判断
2.(利用class)Object. prototype.toString.call(obj)===[ object Array]
class:每个对象的内部属性,记录创建对象时使用的类型名,一旦创建,无法修改。
问题:数组类型等内置类型,重写了toString方法,直接调用数组对象的方法,不再返回class

三.数组的深浅拷贝

  1. 浅拷贝(数组): (会改变原数组)
    就是数组A重新赋值给数组B,数组B里的属性值被改变,则数组A里的值也会跟着发生改变。
  2. 深拷贝(数组): (不会改变原数组)
    (1)使用slice() 和 concat()方法来实现深拷贝
    (2)利用循环实现
 // arrayObj.slice(start, [end]) 
 //该方法返回一个 Array 对象,其中包含了 arrayObj 的指定部分。不会改变原数组 
var arr1 = [1, 2, 3];
var arr2 = arr1.slice(0);
arr1[0] = 4;
console.log(arr1); //4, 2, 3
console.log(arr2); //1, 2, 3
arrayObj.concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
var arr1 = [1, 2, 3];
var arr2 = arr1.concat();
arr1[0] = 4;
console.log(arr1); //4, 2, 3
console.log(arr2); //1, 2, 3
循环实现深拷贝
var arr1 = [1, 2, 3];
  var arr2 = [];
  for (var i = 0; i < arr1.length; i++) {
     arr2.push(arr1[i]);
 }
 arr1[0] = 4;
 console.log(arr1); //4, 2, 3
 console.log(arr2); //1, 2, 3

四.数组去重

  1. 遍历数组使用indexOf去重
    新数组中若该项的下标为-1,则表示新数组中没有找到,就可以将该项放入新数组中。
arr.forEach(item=>{
    if(arr2.indexOf(item) == '-1'){
        arr2.push(item);
    }    
})
  1. sort排序后遍历过滤数组
    先给数组排序,这样相同的项总是相邻。然后遍历数组和前一个对比,不相等就放入新数组中。
var arr2 = [arr[0]];
arr.forEach((item,index)=>{
    if(item != arr2[arr2.length-1]){
        arr2.push(item)
    }
})
  1. set实现
    使用扩展运算符[…]和Set结构相结合,可以去掉数组中重复的元素。
var arr2 = new Set(arr);
var newArr = [...arr2]; 
console.log(newArr); 

五. for-in,for-of,forEach()

1.for-in 输出的是键,可以用来遍历json

for-in用来循环对象中的属性,但是通过for-in循环输出的属性名的顺序是不可测的。具体来说,所有属性都会被返回一次,但返回的先后次序可能会因浏览器而异。

2.for-of输出值:

for-of三种方法
key()是对键名的遍历;
value()是对键值的遍历;
entries()是对键值对的遍历;

3.forEach()循环:forEach中传入要执行的回调函数,函数有三个参数。第一个参数为数组元素(必选),第二个参数为数组元素索引值(可选),第三个参数为数组本身(可选)

<script>
    const arr = ["a", "v", "y", "s"]

    for (let item in arr) {
    console.log(item)   // 键0,1,2,3
    }

    for (let item of arr) {
    console.log(item)   //a,v,y,s
    }
</script>

六.数组常用方法

  • 添加
    • push(元素):从尾部添加 push方法返回的数组的长度
    • unshift(元素):从头部添加
  • 删除
    • pop():从尾部弹出
    • shift():从头部弹出
  • splice
    • splice(起点,长度):删除
    • shift(起点,长度,添加元素):插入
    • shift(起点,长度,替换元素):替换
  • concat(数组) : 连接数组
  • join(‘分隔符’) : 生成字符串(字符串split)
  • sort() :排序
    • sort():只认字符串
    • sort(function(){}):可对数字排序
<script>
    var arr = [99,67,8,11,112];
    // alert(arr.sort()); 
    //输出 11,112,67,8,99
    
    alert(arr.sort(function(n1,n2){
        return n1-n2;
    }))
    //8,11,67,99,112
</script>

七.arguments 可变参

  1. arguments不是数组
    虽然可以使用下标访问相应的参数,但是并非正真的数组。它不能使用数组的.join()、.concat() 、.pop()等数组的方法。
  2. 将伪数组转为真正的数组的方法 Array.prototype.slice.call(arguments)
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值