javascript 笔试题整理
1、写一个深拷贝方法function deepClone (origin, target) {var target = target || {}var toStr = Object.prototype.toStringvar arrType = '[object Array]'for (var key in origin) {if (origin.hasOwnProperty(key)) {if
1、写一个深拷贝方法
function deepClone (origin, target) {
var target = target || {}
var toStr = Object.prototype.toString
var arrType = '[object Array]'
for (var key in origin) {
if (origin.hasOwnProperty(key)) {
if (typeof(origin[key]) === 'object' && origin[key] !== null) {
if (toStr.call(origin[key]) === arrType) {
target[key] = []
} else {
target[key] = {}
}
deepClone(origin[key], target[key])
} else {
target[key] = origin[key]
}
}
}
return target
}
// 要克隆的对象
Object.prototype.bbb = '原型上的属性'
var person1 = {
name: '张三',
age: 20,
children: {
car: ['马自达', '奔驰'],
home: '别墅',
first: {
aaa: '123123'
}
}
}
// 使用
var person3 = deepClone(person1)
console.log(person3)
2、写一个数组排序的方法
升序:
var arr = [27, 49, 7, 5, 7]
arr.sort(function (a, b) {
if (a > b) {
return 1
} else {
return -1
}
})
// 下边注释的是简写的方式
// arr.sort((a, b) => a - b)
console.log(arr) // [5, 7, 7, 27, 49]
降序:
var arr = [27, 49, 7, 5, 7]
arr.sort(function (a, b) {
if (b > a) {
return 1
} else {
return -1
}
})
// 下边注释的是简写的方式
// arr.sort((a, b) => b - a)
console.log(arr) // [49, 27, 7, 7, 5]
3、写一个数组随机排序方法
var arr = [1,2,3,4,5,6,7]
arr.sort((a, b) => {
var rand = Math.random()
if (rand - 0.5 > 0) {
return 1
} else {
return -1
}
})
console.log(arr)
原理: Math.random() 返回 0 - 1 之间的随机数,不包含 0 和 1
sort(function (a, b) {} ) sort() 方法接受一个函数作为参数,函数中有两个参数,
a 和 b , 如果 a 大于 b 的话 返回正数,b 在前边, a 在后边, 如果 a 小于 b 的话 返回 负数, a 在前边, b 在后边, 如果 a 和 b 相等 返回 0 , a 和 b 的位置不动,所以, a 等于 b 的这种情况可以忽略。只比较 a 和 b 的大小就可以了,
然后我们根据这个原理, 取一个 大于 0 小于 1 的随机数, 0 - 1 之间的中间值是 0.5 ,我们那取到的这个随机数 和 中间数 0.5 做比较,在利用上边说的原理,返回正数 或者 负数,就可以保证a 和 b 个有50% 的概率随机排序
4、参数列表 arguments 转成数组
function test () {
console.log(arguments)
var arr = Array.prototype.slice.call(arguments)
console.log(arr)
}
test(1,2,3,4,5,6)
结果如下:
通过调用 Array.prototype.slice 方法就可以吧 arguments 转成数组
5、根据字节长度排序
var arr = ['adf阿斯蒂芬', 'ok', 'aa', '哈哈哈 阿萨', '你好oo']
// 获取字节长度函数
function getByte(str) {
var bytes = str.length;
for (var i = 0 ; i < str.length; i++) {
if (str[i].charCodeAt(0) > 255) {
bytes++;
}
}
return bytes
}
// 测试 getByts() 方法
// console.log(getByte('你好'))
var newArr = arr.sort(function (a, b) {
return getByte(a) - getByte(b)
})
console.log(newArr)
// ["ok", "aa", "你好oo", "adf阿斯蒂芬", "哈哈哈 阿萨"]
6、数组去重
var arr = [0, 0, 1, 1, 2,3,4,4,5,6]
Array.prototype.unique = function () {
var temp = {}
var newArr = []
for (var i = 0; i < this.length; i++) {
if (!temp.hasOwnProperty(this[i])) {
temp[this[i]] = this[i]
newArr.push(this[i])
}
}
return newArr
}
console.log(arr.unique())
// [0, 1, 2, 3, 4, 5, 6]
7、字符串去重
var str = '11133333000aaaabbbdsdfas'
String.prototype.unique = function () {
var temp = {}
var newStr = ''
for (var i = 0; i < this.length; i++) {
if (!temp.hasOwnProperty(this[i])) {
temp[this[i]] = this[i]
newStr += this[i]
}
}
return newStr
}
console.log(str.unique()) // 130abdsf
8、找出字符串中出现次数最少的字母,和第一次出现的位置
var str = 'fgsfgasdgsdfgsdfgsdgfsdwefgsahadsdfmfsa'
function test (str) {
var temp = {}
for (var i = 0; i < str.length; i++) {
if (temp.hasOwnProperty(str[i])) {
temp[str[i]]++
} else {
temp[str[i]] = 1
}
}
// console.log(temp)
for (var key in temp) {
// console.log(key, temp[key])
if (temp[key] === 1) {
return key
}
}
}
console.log(test(str)) // w
console.log(str.indexOf(test(str))) // 23
更多推荐
所有评论(0)