SOURCE

//查看对象是否为数组

const a = [12, 3, 4, 5]

// 第一种
const isArr = (arr) => {
    if (typeof arr === 'object') {
        console.log(111, Object.prototype.toString.call(arr))
        return Object.prototype.toString.call(arr) === '[object Array]'
    } else {
        return false
    }
}
console.log(isArr(a))

// 第二种
console.log(Array.isArray(a))


//第三种instanceof
console.log(instance(a, Object))

//手写instanceof
function instance(cur, target) {
    if (typeof cur !== 'object' || cur === null) {
        return false
    }
    let __proto__ = Object.getPrototypeOf(cur)

    while (__proto__) {
        console.log(__proto__)

        if (__proto__ === target.prototype) {
            console.log(target.prototype)
            return true
        }
        __proto__ = Object.getPrototypeOf(__proto__)
    }
    return false



}

// 第四种
console.log(11111, [].constructor === Array)



//------------------------------------


//冒泡

const line = [12, 3, 4, 5, 6, 7, 5, 4, 3, 32, 325, 6, 7]

const bubbleSort = (arr) => {
    for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < arr.length - i; j++) {
            if (arr[j] > arr[j + 1]) {
                [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
            }
        }
    }
}


// bubbleSort(line)



//快排

const quickSort = (arr) => {
    if (arr.length < 2) {
        return arr
    }
    const middle = Math.floor(arr.length / 2)

    const [point] = arr.splice(middle, 1)
    const leftsort = []
    const rightsort = []

    for (let i = 0; i < arr.length; i++) {
        if (arr[i] < point) {
            leftsort.push(arr[i])
        } else {
            rightsort.push(arr[i])
        }
    }

    return [...quickSort(leftsort), point, ...quickSort(rightsort)]

}

console.log(quickSort(line))


//获取字符串的字节数

function getByteCount(str) {
    let len = str.length
    for (let i = 0; i < str.length; i++) {
        str.charCodeAt(i) > 255 && len++
    }
    return len
}

console.log(getByteCount('1你好'))


//手写bind

function mybind(context, ...args) {
    const fn = this

    return function (...argument) {
        return fn.apply(context, [...argument, ...args])

    }
}

function clone(source, map = new WeakMap()) {
    if (source === null || typeof source !== 'object') {
        return source
    }
    if (map.has(source)) {
        map.get(source)
    }
    const object = source.constructor() //[] or {}

    map.set(source, object)
    for (let key in source) {
        if (source.hasOwnProperty(key))
            object[key] = clone(source[key], map)
    }
    return object


}


console.log(clone({ a: 1, b: [1, 2, 3,], c: { d: 1 } }))


//随机sort 10-100
const mySort = (start, end, count) => {
    // 1.算范围
    // 2.循环
    const range = end - start + 1
    const arr = []

    for (let i = 0; i <= count; i++) {
        //0~1*91+10 = 10~101向下取整
        arr.push(Math.floor(Math.random() * range + start))
    }
    arr.sort((a, b) => a - b)
    return arr
}
console.log(mySort(10, 100, 10))

//递归1-100


// function sum(start, end, total = 0) {
//     return start > end ? total : sum(start + 1, end, total + start)

// }
function sum(val) {
    if (val === 1) {
        return val
    }
    return val + sum(val - 1)
}

console.log(sum(100))


//提取url参数

const obj = {}

const organl_url = "https://example.com/?foo=bar&baz=qux";

// const url = new URL(organl_url).search

// const params = new URLSearchParams(url)

// for (let [key, value] of params) {
//     obj[key] = value
// }

// console.log(obj)

const params = organl_url.split('?')[1]
const search = params.split('&')
const type = search.map(item => item.split('='))

for (let [key, value] of type) {
    obj[key] = value
}
console.log(obj)


//实现trim()
const _trim = function (a) {
    return a.replace(/^\s+/, "").replace(/\s+$/, "")

}

ab = '              12312312312           '
console.log(_trim(ab))


//每秒打印1-到10
// let i= 1
// const cd = setInterval(()=>{
//     console.log(i++)
//     if(i>10){
//         clearInterval(cd)
//     }
// },1000)

// 数组扁平化处理 递归
const arrFlat = [1, 2, 3, 4, 5, 6, [1, 2, 34, 235, 6345, [123123, 5, 6, 7], ['abc'], ['qqqq', 'cccc']]]
const fnflat = (arr) => arr.reduce((pre, cur) => pre.concat(Array.isArray(cur) ? fnflat(cur) : cur),[])




console.log(fnflat(arrFlat))


//手写-查找数组公共前缀
// 示例 1:

// 输入:strs = ["flower","flow","flight"]
// 输出:"fl"

var longestCommonPrefix = function (strs) {
    // 纵向比较,先拿一个出来和剩下的对比
    const target = strs[0]
    let res = ""
    for (let i = 0; i < target.length; i++) {
        single = target[i]
        for (let j = 1; j < strs.length; j++) {
            otherWord = strs[j]// 这里拿到的是一个单词
            if (otherWord[i] !== single || i === otherWord.length) {
                return res
            }
        }
        res +=single
    }
    return res

};

console 命令行工具 X clear

                    
>
console