JS面试题--数组相关

(1)解释以下unshift()方法

unshift()方法,将参数成员添加到数组的顶部。

(2)用JavaScript实现数组合并的方法(要求去重)

这里可以使用ES6特性

var arr=[1,5,3];
var arr1=[13,2,3,8,5];
function(arr1,arr2){
  var arr = arr1.concat(arr2);
  return [...new Set(arr)];
}

(3)如何将一个值附加到数组中

//(1)可以在数组末尾添加 
arr[arr.length]=value;

//(2) 可以使用push方法 
arr.push(value);

(4)已知var numArr=[3,6,2,4,1,5],完成以下两个操作

①实现数组的倒序排列,输出[5,1,4,2,5,3]

numArr.reverse();

②实现数组的降序排列,输出[6,5,4,3,2,1]

numArr.sort(function(a,b){
return b-a; //降序
})

(5)JS里的函数参数arguments是数组吗?

arguments不是数组。虽然可以使用下标访问相应的参数,但是并非正真的数组。它不能使用数组的.join()、.concat() 、.pop()等数组的方法。

将伪数组转为真正的数组的方法  realArr = Array.prototype.slice.call(arguments)

(6)将下面两个数组合并,并且删除第二个元素

var arr1=['a','b','c'];
var arr2=['d','e','f'];
var arr3 = arr1.concat(arr2); // 合并数组
arr3.splice(1,1); //删除第二个元素

(7)数组有几种创建方式

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

(8)如何删除数组成员?

为了不改变后面成员的索引值可以使用 delete arr[index] 删除

删除成员的同时删除所占位置 使用 arr.splice(index,1);

(9)用什么方法来判断一个对象的数据类型?如何判断数组?

用typeof判断对象类型,可以准确的检测值类型(也叫原始类型或者基本类型)

用instanceOf()判断是不是数组

(10)讲一下手写数组快速排序的步骤

  • 在数据集合中找一个基准点
  • 建立两个数组分别存储左边和右边的数组
  • 利用递归,进行下一个的比较
function quicklySort(arr){
				if(!arr instanceof Array){
					return ;
				}
				//少于一个成员直接返回
				if(arr.length<=1){
					return arr;
				}
				//获取中间数的索引值
				var num = Math.floor(arr.length/2);
				//获取中间数值
				var value = arr.splice(num,1);
				var left=[];//小于中间数的数组
				var right=[];//大于中间数的数组
				
				for(var i=0;i<arr.length;i++){
					if(arr[i]<value){
						left.push(arr[i]);
					}else{
						right.push(arr[i]);
					}
				}
				//将左右两边的容器递归比较,并将结果与中间值拼接在一起
				return quicklySort(left).concat(value,quicklySort(right));
			}

(11) ['1','2','3'].map(parseInt)的执行结果是多少?

[1,NaN,NaN];

分析:parseInt(val,radix)需要两个参数;radix表示解析时用的基数(进制);

map(item,index,array) 对应的radix不合法导致解析失败

(12)输出什么?

function addToList(item, list) {
  return list.push(item);
}

const result = addToList("apple", ["banana"]);
console.log(result);

输出:2 因为数组的push方法返回的数组的长度

(13)输出什么

const myLifeSummedUp = ["☕", "?", "?", "?"]

for (let item in myLifeSummedUp) {
  console.log(item)
}

for (let item of myLifeSummedUp) {
  console.log(item)
}

 0 1 2 3 and "☕" "?" "?" "?"

通过for-in循环,我们可以遍历一个对象自有的继承的可枚举的非Symbol的属性。 在数组中,可枚举属性是数组元素的“键”, 即它们的索引。

通过for-of循环,我们可以迭代可迭代对象(包括 ArrayMapSetStringarguments等)。当我们迭代数组时,在每次迭代中,不同属性的值将被分配给变量item

(14)输出什么?

let newList = [1, 2, 3].push(4)

console.log(newList.push(5))

Error 因为push返回的是数组的长度 4 number类型没有push方法

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值