1.rgb转hex
const rgbToHex = (rgb) => {
const reg = /[\d,]+/
const str_arr = reg.exec(rgb)[0].split(',').map(Number)
const rgbToHex = (...arg) => {
return '#' + arg.map(v => v.toString(16).length > 1 ? v.toString(16) : `0${v.toString(16)}`).join('')
}
let res = rgbToHex(...str_arr)
return res
}
rgbToHex('rgb(255,255,213)');
函数柯里化
// 题目3 函数柯里化
function currying(fn) {
let a_arg, b_arg,c_arg
function a(arg) {
a_arg = arg||0
return b
}
function b(arg) {
b_arg = arg||0
return c
}
function c(arg) {
c_arg = arg||0
return fn(a_arg, b_arg, c_arg )
}
return a
}
console.log(currying((a, b, c) => a + b + c)(1)(2)(3));
实现数组拼接和排序
不能使用concat和sort
function address(arr1, arr2) {
const arr = []
arr1.push(...arr2)
for (let i = 0; i < arr1.length; i++) {
for (let j = 0; j < arr1.length - 1 - i; j++) {
let temp = null
if (arr1[j] > arr1[j + 1]) {
temp = arr1[j + 1]
arr1[j + 1] = arr1[j]
arr1[j] = temp
}
}
}
return arr1
}
console.log(address(arr1, arr2))
完美深拷贝
function deepClone(target) {
const map = new WeakMap()
function _deepClone(target) {
if (typeof target !== 'object' || target === null) {
return target
}
let result = Array.isArray(target) ? [] : {}
map.set(target, result)
function obj_arr(target) {
for (let key in target) {
if (target.hasOwnProperty(key)) {
result[key] = _deepClone(target[key])
}
}
}
const typeDeal = {
'Object': obj_arr,
'RegExp': (reg) => result = new RegExp(reg),
'Date': (date) => result = new Date(date),
'Array': obj_arr,
'function': function () {
return target.call(this, arguments)
}
}
const type = Object.prototype.toString.call(target).slice(8, -1)
typeDeal[type](target)
return result
}
return _deepClone(target)
}
代码输出题
//结果是5,iife创建了函数作用域,b修改的是var b = 6 变量提升的b,console.log引用的是外部的b变量,即最初定义的b值为5的变量。因此,输出结果为5。
var b = 5;
(()=>{
b=4
var b = 6
})();
console.log(b); // 5
function test(value){
switch(value){
case 'A':
console.log('a');
break;
case 'B':
console.log('b')
break;
case undefined:
console.log('und')
break;
default:
console.log('default')
break;
}
}
test(new String('A')) // default。通过包装类new出来的就是对象类型了。
function a(b){
console.log(b)
function b(){
console.log(b)
}
b()
}
a(1) //输出的b全是b函数 同名函数优先级最高!
function a(b) {
console.log(b)//这里输出函数,同名b函数优先级最高
var b = 2 //这里覆盖了b函数,
function b() {
console.log(b)
}
b() // 执行到这里会报错。 由于上面var b = 2 覆盖了b函数,此时b = 2因此无法作为函数执行
}
a(1)
const a = [1,2,3,4].push(5)
console.log(a) // 5 上面调用push后得到的就是push的返回值,push返回值为添加元素后数组的长度