前端面试题记录

前言: 持续记录一下遇到的有意思的面试题。

1.如何使用结构语法结构对象

// let [name,age] = {name:"sne",age:23}
// 因为对象中没有迭代器所以直接执行会报错 TypeError: {(intermediate value)(intermediate value)} is not iterable

// 1. 模仿生成器函数
let [name,age] = {
    name:"sne",
    age:23,
    [Symbol.iterator](){
        let that = this // 当前对象实例
        let index = 0   // keys数组索引
        let keys = Object.keys(this) // 当前对象的所有keys ['name','age']    
        return {
            next(){
                return {
                    value: that[keys[index++]],
                    done: index > that.length
                }
            }
        }
    }
}

console.log(name) // sne
console.log(age) // 23

// 2. 直接在Object.prototype上使用生成器函数实现
Object.prototype[Symbol.iterator] = function* (){
    for(let key of Object.keys(this)){
        yield this[key]
    }
}

let [name2,age2] = {name2:"sne2",age2: 24}
console.log(name2) // sne2
console.log(age2) // 24


2. 如何使3a相等

// 问题: 如何使得 (a==1 && a==2 && a==3) 成立

// 将a设置为一个对象,因为每次调用对象的时候都会执行valueOf函数,因此在此函数中进行值累加即可

let a = {
    value:1,
    valueOf(){
        return this.value++
    }
}

3. 实现数组扁平化

let arr = [
    [1,3,5],
    [5,6,8,9,7],
    [2,6,4,[6,3,6,5,[0,0]]]
]

Array.prototype.customFlatten = function() {
    let newArr;
    // 遍历目标数组
    for(let i = 0; i < this.length; i++){
        // 使用instanceOf判断对应的数据是否还是数组
        if(this[i] instanceOf Array){
            // 将该数组递归调用该扁平化函数,结构得到扁平化之后的数组
            newArr = [...newArr, ...this[i].customFlatten()]
        } else {
        // 如果不是则直接将当前的值添加到新数组尾部
            newArr = [...newArr, this[i]]   
        }
    }
    return newArr;
}

console.log(arr.customFlatten())

持续更新......

点个赞呗

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值