前端技术栈

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

上一篇下一篇

猜你喜欢

热点阅读