标签:ring targe nts || 属性 lse this val 而不是
// let obj = { // a: 12, // arr: [{ // b: 12 // }, { // c: 13 // }] // } function deepClone(origin, target) { let tar = target || {}; let str = Object.prototype.toString; let arrType = ‘[object Array]‘; for (let key in origin) { //判断属性是否在自己本身而不是在原型链上面 if (origin.hasOwnProperty(key)) { if (typeof origin[key] === ‘object‘ && origin[key] != null) { tar[key] = str.call(origin[key])=== arrType ? [] : {}; deepClone(origin[key], tar[key]) } else { tar[key] = origin[key] } } } return tar } // const newObj = deepClone(obj, {}) // newObj.a = 14 // console.log(newObj); // console.log(obj); /** * * * 实现foreach重写 * * */ let arr = [ { name:‘zs‘, age:10 }, { name:‘ls‘, age:12, }, { name:‘wu‘, age:19 } ] // arr.forEach(function(item,index,ar){ // console.log(item,index,ar); // }) // Array.prototype.myForeach = function(cb){ // //谁调用指向谁 // var _arr = this; // var _len = _arr.length; // var _arg2 = arguments[1] || window; // for (let i = 0; i < _len; i++) { // cb.apply(_arg2,[_arr[i],i,_arr]) // } // } // arr.myForeach(function(item,index,ar){ // console.log(this); // console.log(item,index,ar); // }) /** * * 重写map方法 * */ // arr.map(function (item,index,arr) { // console.log(item,index,arr); // }) // Array.prototype.myMap = function (cb) { // let _arr = this; // let _len = _arr.length; // let _arg2 = arguments[1] || window; // let newArr = []; // let _item; // for (let i = 0; i < _len; i++) { // _item = deepClone(_arr[i]) // newArr.push(cb.apply(_arg2,[_item,i,_arr])) // } // return newArr // } // arr.myMap(function (item,index,arr) { // console.log(item,index,arr); // }) // Array.prototype.myFilter = function (cb) { // //保存数组 // let _this = this; // let _len = _this.length; // let _arg2 = arguments[1] || window; // let _newArr = []; // let _item; // for (let i = 0; i < _len; i++) { // _item = deepClone(_this[i]) // cb.apply(_arg2,[_item,i,_this])?_newArr.push(_item) : "" // } // return _newArr; // } // let newarr = arr.filter(function (item,index) { // return false // }) // let myfilr = arr.myFilter(function (item,index) { // return true // }) // console.log(newarr); // console.log(myfilr); /** * * every 重写 * * * */ // arr.every(function (item,index,array) { // console.log(item,index,array); // }) // Array.prototype.myeve = function (cb) { // let _arr = this; // let _len = _arr.length; // let _arg2 = arguments[1] || window; // let _flag = true; // for (let i = 0; i < _len; i++) { // let fl = cb(_arg2,[_arr[i],i,_arr]) // if (!fl) { // _flag = false; // break; // } // } // return _flag; // } // let rel = arr.myeve(function (item,index,array) { // return item.age<4 // }) // console.log(rel); /** * 重写some * */ // let a = arr.some(function (item,index) { // console.log(item,index); // return item.age == 18 // }) // console.log(a); // Array.prototype.mysome = function (cb) { // let _arr = this; // let _len = _arr.length; // let _arg2 = arguments[2] || window; // let _flag = false; // for (let i = 0; i < _len; i++) { // let fl = cb.apply(_arg2,[_arr[i],i,_arr]) // if (fl) { // _flag = true; // break; // } // } // return _flag // } /** * 重写reduce * * */ let redarr = [] let newArr = arr.reduce(function (prev,item,index,array) { //也可以使用reduce做筛选 item.age>10 && prev.push(item) return prev },redarr) console.log(newArr); Array.prototype.myReduce = function (cb,initvalue) { let _arr = this; let _len = _arr.length; let _argu3 = arguments[2] || window; let _item; for (let i = 0; i < _len; i++) { _item = deepClone(_arr[i]) initvalue = cb.apply(_argu3,[initvalue,_item,i,_arr]) } return initvalue }
标签:ring targe nts || 属性 lse this val 而不是
原文地址:https://www.cnblogs.com/ll-11/p/14426851.html