手写map
Array.prototype.myMap = function (fun, _this) {
let list = []
let length = this.length
let _fun = _this ? fun.bind(_this) : fun
for (let index = 0; index < length; index++) {
let res = _fun(this[index], index, this)
list.push(res)
}
return list
};
let test = function(value, index, array) {
console.log('2次结果',this,value, index, array ) // ==> 2次结果 ['新this'] 循环值 0 ['循环值']
return value
}
let myMap = ['循环值'].myMap(test,['新this']);
let map = ['循环值'].map(test,['新this']);
console.log({
myMap, map
})
}
手写json
let json = {
name:'名字',
test:undefined,
test1:null,
all:{
list:[1,2,undefined,{name:'测试'},undefined],
test:undefined,
test1:null,
}
}
const test = (object)=>{
let res = {};
if(object === null)return null;
if(Array.isArray(object))return object.map(test);
if(typeof object !== 'object')return object;
for(const key in object) {
let value = typeof object[key] === 'object' ? test( object[key]) : object[key];
res[key] = value;
}
return res
}
let res = test(json)
console.log(json.all == res.all)
console.log(json == res)