js综合基础面试题整理
2017-06-09 本文已影响82人
Ann_l
实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制。#####
【其实看见这题的时候,我的表情是 are u kidding me!你考点在哪里,后来我看了别人写的一些demo。放上代码以后,分析一下考点】
function clone(obj) {
var o
switch (typeof obj) {
case 'undefined':
break;
case "string":
o = obj + ""
break;
case "number":
o = obj - 0
break;
case "boolean":
o = obj
break
case "object":
if (obj === null) {
o = null
} else {
if (Object.prototype.toString.call(obj) === '[object Array]') {
o = []
for (var i = 0; i < obj.length; i++) {
o.push(clone(obj[i]))
}
} else {
o = {}
for (var k in obj) {
o[k] = clone(obj[k])
}
}
}
break
default:
o=obj
break
}
return o
}
var arr=[1,2,3,4,5]
var arr1={1:'11'}
console.log(clone(arr1))//{ '1': '11' }
考点:
1、判断类型的办法
typeof 可以判断出5中基本类型number、string、undefined、bool、object.但object是复合型,怎么精准的判断object呢!使用Object.prototype.toString.call(obj)
2、递归的使用
3、考察对数据类型的了解
数组查重#####
这题去了5家面试,3家都出了这道题目。我一直在想这题除了到底意义在哪里,怎么根据这道题目考查一个小屌丝的水平呢。后来被考多了,我发现通过这题可以看出挺多,例如对es6的了解、算法基础等。上代码:
第一种:常规方法#######
var arr = [1, 2, 9, 3, 2, 4, 5]
var arr2 = []
for (var i = 0, len = arr.length; i < len; i++) {
if (arr2.indexOf(arr[i]) < 0) {
arr2.push(arr[i])
}
}
console.log(arr2)
第二种:es6的set#######
var arr = [1, 2, 9, 3, 2, 4, 5]
var arr3=new Set()
arr.forEach(function (item,index,arr) {
arr3.add(item)
})
console.log(arr3)//Set { 1, 2, 9, 3, 4, 5 }
第三种:lodash的uniq#######
宝宝真的懒...就爱用lodash
附上使用网址:http://www.css88.com/doc/lodash/#_indexofarray-value-fromindex0