文章目录
1.push
javascript
复制代码
// push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。
// 末尾添加,返回的是长度,会改变原数组。
Array.prototype.myPush = function(){
for(var i = 0; i < arguments.length; i++) {
this[this.length] = arguments[i]
}
return this.length;
}
let a = [1,2,3]
let b = a.myPush(4,5)
console.log(a);//[1,2,3,4,5]
2.pop
javascript
复制代码
// pop() 方法用于删除并返回数组的最后一个元素。
// 返回最后一个元素,会改变原数组。
Array.prototype.myPop = function(){
// 判断数组是否为空
if(this.length === 0) return;
// 先保存最后一个元素
var atr = this[this.length - 1];
// 通过设置数组的length属性来实现删除元素的效果
this.length = this.length - 1;
return atr;
}
let a = [1,2,3]
let b = a.myPop()
console.log(a);//[1,2,3]
console.log(b);//3
3.unshift
javascript
复制代码
// unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。
// 返回新长度,改变原数组。
Array.prototype.myUnshift = function(){
for (let i = this.length + arguments.length; i >0 ; i--) {
// 原数组的最后一个等于原数组的最后一个元素,依次减减,arguments没有了就给原数组赋值undefine
this[i-1] = this[i-arguments.length-1]
}
for (let j = 0; j < arguments.length; j++) {
this[j] = arguments[j]
}
// 返回新长度
return this.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
javascript
复制代码
// 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 -1
return atr
}
let a = [1,2,3]
let b = a.myShift()
console.log(a);//[2,3]
console.log(b);//[1]
5.slice
javascript
复制代码
// 返回一个新的数组,包含从 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
javascript
复制代码
// splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。
// 如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。
// splice() 方法会直接对数组进行修改。
Array.prototype.mySplice = function () {
let start = arguments[0]
let end = arguments[1]
let delArr = [] //被删除的元素
let newArr = [] //没有被删除的元素
// 如果没有元素需要替换,直接等于undefined
for (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
javascript
复制代码
// 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
javascript
复制代码
// 遍历数组返回一个新的数组
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
javascript
复制代码
// 过滤掉满足条件的元素,返回一个新数组
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
javascript
复制代码
// 该函数传入一个函数,返回一个条件,只要有一个元素满足条件就返回true
Array.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){
return true
}else{
return false
}
}
let a = [1,2,3,4,5,6,7,8,9]
let b = a.mySome((item)=> item < 5)
console.log(b);//true
11.every
javascript
复制代码
// 接收一个函数,函数返回一个条件,数组全部返回ture,则该函数九返回ture
Array.prototype.myEvery = function (fn){
let num = []
for (let i = 0; i < this.length; i++) {
// 满足条件的个数
if(fn(this[i])){
num.push(this[i])
}
}
// 如果满足条件的元素与原数组的元素一样,返回ture,否则返回false
if(num.length == this.length){
return true
}else {
return false
}
}
let a = [1,2,3,4,5,6,7]
let b = a.myEvery((item)=>{
return item < 8
})
console.log(b);
12.concat
javascript
复制代码
// concat() 方法用于连接两个或多个数组。
// 该方法不会改变现有的数组,仅会返回被连接数组的一个副本。
Array.prototype.myConcat = function(oldArr){
let newArr = this
for (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
javascript
复制代码
// 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
javascript
复制代码
// 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
javascript
复制代码
// 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
javascript
复制代码
// 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
javascript
复制代码
// 返回一个新数组,对元素进行排序,这里简单的对数字进行一下排序,主要是排序思想(冒泡排序)
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
}
}
}
}
return this
}
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
javascript
复制代码
// find() 方法是 JavaScript 中用于在数组中查找特定条件的第一个元素,如果找到一个元素使得回调函数返回true,
// 则该元素作为结果返回;如果没有找到这样的元素,则返回undefined,该函数不会修改原始数组。
Array.prototype.myFind = function(fn){
for (let i = 0; i < this.length; i++) {
if(fn(this[i])){
return this[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: '胡歌'}
19.reduce