前言: 持续记录一下遇到的有意思的面试题。
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())
持续更新......
点个赞呗