// push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。// 末尾添加,返回的是长度,会改变原数组。Array.prototype.myPush=function(){for(var i =0; i < arguments.length; i++){this[this.length]= arguments[i]}returnthis.length;}let a =[1,2,3]let b = a.myPush(4,5)
console.log(a);//[1,2,3,4,5]
// unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。// 返回新长度,改变原数组。Array.prototype.myUnshift=function(){for(let i =this.length + arguments.length; i >0; i--){// 原数组的最后一个等于原数组的最后一个元素,依次减减,arguments没有了就给原数组赋值undefinethis[i-1]=this[i-arguments.length-1]}for(let j =0; j < arguments.length; j++){this[j]= arguments[j]}// 返回新长度returnthis.length
}let a =[4,5]let b =a.myUnshift(1,2,3)
console.log(a);//[1,2,3,4,5]
console.log(b);//5
4.shift
// shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。// 返回第一个元素,改变原数组。Array.prototype.myShift=function(){// 保留第一个元素let atr =this[0]for(let i =0; i <this.length ; i++){this[i]=this[i+1]}this.length =this.length -1return atr
}let a =[1,2,3]let b = a.myShift()
console.log(a);//[2,3]
console.log(b);//[1]
5.slice
// 返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。// 返回选定的元素,该方法不会修改原数组。Array.prototype.mySlice=function(){let newArr =[]let start = arguments[0]let end = arguments[1]for(let i = start ; start <= i && i< end; i++){newArr.push(this[i])}return newArr
}let a =[1,2,3,4,5,6]let b = a.mySlice(1,4)
console.log(b);//[2,3,4]
6.splice
// splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。// 如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。// splice() 方法会直接对数组进行修改。Array.prototype.mySplice=function(){let start = arguments[0]let end = arguments[1]let delArr =[]//被删除的元素let newArr =[]//没有被删除的元素// 如果没有元素需要替换,直接等于undefinedfor(let i = start; i >= start && i < end; i++){// 没有替换元素,返回被删掉的元素if(arguments.length <3){delArr.push(this[i])this[i]=undefined}else{// 替换掉删除的元素delArr.push(this[i])this[i]= arguments[i - start +2]}}// 删除元素组未undefine的元素for(let j =0; j <this.length; j++){if(this[j]!==undefined){newArr.push(this[j])}}// 修改元素组for(let n =0; n < newArr.length; n++){this[n]= newArr[n]this.length = newArr.length}return delArr
}let a =[1,2,3,4,5,6]let b = a.mySplice(0,3)
console.log(a);//[4,5,6]
console.log(b);//[1,2,3]let c =[1,2,3,4,5,6]let d = c.mySplice(0,3,7,8,9)
console.log(c);//[4,5,6]
console.log(d);//[1,2,3]
7.forEach
// forEach 数组遍历Array.prototype.myForEach=function(fn){for(let i =0; i <this.length; i++){fn(this[i])}}let items =['item1','item2','item3']let copy =[]
items.myForEach((items)=>{copy.push(items)})
console.log(copy);
8.map
// 遍历数组返回一个新的数组Array.prototype.myMap=function(fn){let newArr =[]for(let i =0; i <this.length; i++){newArr.push(fn(this[i]))}return newArr
}let obj =[{'name':'胡歌','age':40},{'name':'刘德华','age':41}]let res = obj.myMap((item)=>{return{'姓名':item.name,'年龄':item.age}})
console.log(res);//[ { '姓名': '胡歌', '年龄': 40 }, { '姓名': '刘德华', '年龄': 41 } ]
9.filter
// 过滤掉满足条件的元素,返回一个新数组Array.prototype.myFilter=function(fn){let newArr =[]for(let i =0; i <this.length; i++){if(fn(this[i])){newArr.push(this[i])}}return newArr
}let a =['胡歌','刘德华','张学友','郭富城']let b = a.myFilter((item)=>item !=='胡歌')
console.log(b);//[ '刘德华', '张学友', '郭富城' ]
10.some
// 该函数传入一个函数,返回一个条件,只要有一个元素满足条件就返回trueArray.prototype.mySome=function(fn){let num =[]for(let i =0; i <this.length; i++){if(fn(this[i])){num.push(this[i])}}if(num.length >0){returntrue}else{returnfalse}}let a =[1,2,3,4,5,6,7,8,9]let b = a.mySome((item)=> item <5)
console.log(b);//true
11.every
// 接收一个函数,函数返回一个条件,数组全部返回ture,则该函数九返回tureArray.prototype.myEvery=function(fn){let num =[]for(let i =0; i <this.length; i++){// 满足条件的个数if(fn(this[i])){num.push(this[i])}}// 如果满足条件的元素与原数组的元素一样,返回ture,否则返回falseif(num.length ==this.length){returntrue}else{returnfalse}}let a =[1,2,3,4,5,6,7]let b = a.myEvery((item)=>{return item <8})
console.log(b);
12.concat
// concat() 方法用于连接两个或多个数组。// 该方法不会改变现有的数组,仅会返回被连接数组的一个副本。Array.prototype.myConcat=function(oldArr){let newArr =thisfor(let i =0; i < oldArr.length; i++){newArr.push(oldArr[i])}return newArr
}let a =[1,2,3]let b =[4,5,6]let c = a.myConcat(b)
console.log(c);//[1,2,3,4,5,6]
13.join
// join() 方法用于把数组中的所有元素放入一个字符串。// 元素是通过指定的分隔符进行分隔的,默认使用’,'号分割,不改变原数组Array.prototype.myJoin=function(){let string =''for(let i =0; i <this.length; i++){string +=this[i]}return string
}let a =[1,2,3,4,5,6]let b = a.myJoin()
console.log(b);//'123456'
14.indexOf
// indexOf(查找的元素,从第几个元素开始) 方法可返回数组或字符串中某个指定的元素位置。// 该方法将从头到尾地检索数组,看它是否含有对应的元素。开始检索的位置在数组 start 处或数组的开头(没有指定 start参数时)。如果找到一个 item,则返回 item 的第一次出现的位置。// 如果在数组中没找到指定元素则返回 -1。Array.prototype.myIndexOf=function(){for(let i = arguments[1]; i <this.length; i++){if(this[i]== arguments[0]){return i}}return-1}let a =[1,2,3,4,5,6]let b = a.myIndexOf(4,3)
console.log(b);//3
15.lastIndexOf
// indexOf(查找的元素,从第几个元素开始) 方法可返回数组或字符串中某个指定的元素位置。// 该方法将从尾到头地检索数组,看它是否含有对应的元素。如果找到一个 item,则返回 item 的第一次出现的位置。// 如果在数组中没找到指定元素则返回 -1。Array.prototype.myIndexOf=function(){for(let i = arguments[1]; i >=0; i--){if(this[i]== arguments[0]){return i}}return-1}let a =[1,2,3,4,5,6]let b = a.myIndexOf(2,3)
console.log(b);//3
16.reserve
// reverse() 方法用于颠倒数组中元素的顺序。返回的是颠倒后的数组,会改变原数组Array.prototype.myReverse=function(){let newArr =[]for(let i =this.length -1; i >=0; i--){newArr.push(this[i])}return newArr
}let a =[1,2,3,4,5,6]let b = a.myReverse()
console.log(b);//[ 6, 5, 4, 3, 2, 1 ]
17.sort
// 返回一个新数组,对元素进行排序,这里简单的对数字进行一下排序,主要是排序思想(冒泡排序)Array.prototype.mySort=function(fn){// 升序if(fn(2,1)==1){// 第一轮遍历for(let i =0; i <this.length; i++){// 第二轮遍历for(let j =0; j <this.length; j++){// 第i个元素与下一个元素进行对比,交换位置let tem if(this[j]>this[j+1]){// 升序tem =this[j]this[j]=this[j+1]this[j+1]=tem}}}// 降序}else{// 第一轮遍历for(let i =this.length -1; i >=0; i--){// 第二轮遍历for(let j =this.length -1; j >=0; j--){// 第i个元素与下一个元素进行对比,交换位置let tem if(this[j]>this[j-1]){// 升序tem =this[j]this[j]=this[j-1]this[j-1]=tem}}}}returnthis}let a =[2,6,1,3,5,0]// 升序let b = a.mySort((a,b)=> a-b)// 降序// let c = a.mySort((a,b)=> b-a)
console.log(b);// console.log(c);
18.find
// find() 方法是 JavaScript 中用于在数组中查找特定条件的第一个元素,如果找到一个元素使得回调函数返回true,// 则该元素作为结果返回;如果没有找到这样的元素,则返回undefined,该函数不会修改原始数组。Array.prototype.myFind=function(fn){for(let i =0; i <this.length; i++){if(fn(this[i])){returnthis[i]}}}let a =[{id:1,name:'刘德华'},{id:2,name:'胡歌'},{id:3,name:'刘华强'}]let b = a.myFind((item)=> item.id ==2)
console.log(b);// {id: 2, name: '胡歌'}
Blender 发布公告指出,在2023年11月18日至23日期间,blender.org 网站遭受了持续的分布式拒绝服务(DDoS)攻击,攻击者通过不断发送请求导致服务器超载,使网站运营严重中断。此次攻击涉及数百个 IP 地址的僵尸…
【c随笔14】虚函数表 一、虚函数表(Virtual Function Table)1、定义2、查看虚函数表2.1、 问题:三种类型,包含一个int类型的class、一个int类型的变量、int类型的指针:这三个大小分别是多少呢?2.2、怎么发现…