javascript-数组方法

  数组原型提供的方法非常之多,主要分为三种,一种是会改变原数组值的,一种是不会改变自身值的,另外一种是遍历方法。

一、改变原数组

1.Array.prototype.pop
说明:删除数组中最后一个元素,并且 返回这个元素

var arr = ['apple', 'banana', 'orange'];
var name = arr.pop();
name; //'orange'
arr;// ['apple', 'banana']


2.Array.prototype.push
说明:向数组添加 一个或多个元素,并且返回数组新的长度

var arr = ['a'];
arr.push('b');//2
arr.push(...['c', 'd']);//4
arr;//(4) ['a', 'b', 'c', 'd']


3.Array.prototype.shift
说明:删除数组的第一个元素,并且返回这个元素
 

var arr = ['apple', 'banana', 'orange'];
var item = arr.shift();
arr;//(2) ['banana', 'orange']
item// 'apple'

4.Array.prototype.splice 
说明:方法用新元素替换旧元素的方式来修改数组

var arr = [10,2,0,3,5]
arr.splice(1)//=》 [2, 0, 3, 5]
arr//=》[10] 原数组改变
var arr = [1,2,3,4,5]
arr.splice(3,1,'a','b','c')//=》从索引为‘3’的位置开始删除一个元素,并添加"a", "b", "c"
arr//=》 [1, 2, 3, "a", "b", "c", 5]

5.Array.prototype.reverse
说明:将数组内元素的位置颠倒,该方法返回对该数组的引用

var arr1 = [10,20,30]
var arr2 = arr.reverse()//=》[30, 20, 10]
arr1//=》 [30, 20, 10] 原数组会改变
arr1 === arr2; //true


6.Array.prototype.sort  (原数组会改变)
说明:对数组的元素进行排序,并返回这个数组

var arr = ['a','g','l','c','b']
arr.sort()//=》 ["a", "b", "c", "g", "l"]
var arr = [56,3,36,2,1,19,22];
arr.sort()//=》 [1, 19, 2, 22, 3, 36, 56]  10以内的数会从小到达排列,超过10就需要用下面的方法,这就涉及到 元素存储的码值问题
arr.sort(function(a,b){
  return a-b
})
//=》 [1, 2, 3, 19, 22, 36, 56]
arr//=》原数组也会改变 [1, 2, 3, 19, 22, 36, 56]
arr.sort(new Function('a','b','return b-a'));此方法也可以完成排序!!!
var arr =['abble', 'Banana','Cat', 'dog']
arr.sort(); // => ["Banana", "Cat", "abble", "dog"]
arr.sort(function(s, t){
 var a = s.toLowerCase();
 var b = t.toLowerCase();
 if (a < b) return -1;
 if (a > b) return 1;
 return 0;
})// => ["abble", "Banana", "Cat", "dog"]

二、不会改变原数组

1.Array.prototype.join(原数组不变)
说明:将数组中所有的元素链接成一个字符串,默认为逗号链接

var arr = [10,20,30]
arr.join('*')//=>转换成字符串输出连接符用‘*’     "10*20*30"
//其他使用
function repeatString(str,n){
  return new Array(n+1).join(str)
}
repeatString('%^',5)//=》传入要重复的字符串和次数两个参数"%^%^%^%^%^"

2.Array.prototype.contact 数组拼接(原数组不变)
说明:将传入的数组或元素与原数组合并,组成一个新的数组并返回

var arr = [10,20,30]
arr.concat(10,20)//=》 [10, 20, 30, 10, 20]
arr//=》 [10, 20, 30] 原数组未改变
arr.concat([1,2],20)//=》 [10, 20, 30, 1, 2, 20] 若有一个参数为数组,则把数组扁平化
arr.concat([1,2,[3,4]])//=》[10, 20, 30, 1, 2, [3,4]]若只有一个参数且为数组,数组中还存在数组,则数组中的数组不能扁平化


3.Array.prototype.slice (原数组不变)
说明:将数组中一部分元素浅复制存入新的数组对象

var arr = [10,2,0,3,5]
arr.slice(1)//=》 [2, 0, 3, 5] 取出索引为‘1’之后的所有元素
arr//=》 [10, 2, 0, 3, 5] 原数组未改变
arr.slice(2,4)//=》[0, 3]取出索引从‘2’-‘4’的元素(左闭右开)
arr.slice(-4,-2)//=》[2, 0]  参数支持负数(可把数组的长度加上负数,就是正数的索引值)
arr.slice(1,3)//=》 [2, 0]  

三、遍历方法

1.Array.prototype.forEach()
说明:指定数组的每一项都执行一次传入的函数,返回值为undefined
参数说明:val:当前正在被处理的元素,index:当前元素索引,arrobj:数组本身

var arr = [1,2,3,4,5,6,7,89,9,10]
arr.forEach((val,index,arrobj)=>{
  console.log(index+' :'+val+'|', arrobj === arr)
})
 0 :1| true
 1 :2| true
 2 :3| true
 3 :4| true
 4 :5| true
 5 :6| true
 6 :7| true
 7 :89| true
 8 :9| true
 9 :10| true


2.Array.prototype.map()
说明:该方法创建一个数组,结果是该数组每个元素执行一次提供的函数的返回值
参数说明:val:当前正在被处理的元素,index:当前元素索引,arr:数组本身

var arr1 = [1, 3, 5, 7];
var arr2 = arr1.map(val => val * 2)
arr2   //=》[2, 6, 10, 14]
原数arr1组不改变//=》 [1, 3, 5, 7]
var arr3 = arr1.map((val, index, arr) => {
  console.log(val, indx, arr )
})
 1 0  [1, 3, 5, 7]
 3 1  [1, 3, 5, 7]
 5 2  [1, 3, 5, 7]
 7 3  [1, 3, 5, 7]


3.Array.prototype.filter()
说明:该方法创建一个数组,包含通过所提供函数实现的测试的所有元素
参数说明: item  :当前正在被处理的元素,index:当前元素索引,arr:数组本身

var arr = []
arr.filter((item,index) => {
    return index % 2 === 0 || item >= 10// 返回索引值可以对2取余或者那一项大于等于10的
})
// 结果 [1, 30, 9, 65, 5]


4.数组判断Array.prototype.every()
说明:该方法测试数组内所有元素是否满足指定函数的测试,都满足返回true,有一个不满足返回false
参数说明: item  :当前正在被处理的元素,index:当前元素索引,arr:数组本身

var arr = [1,2,3,4,5,6,7,89,9,10]
arr.every(item => {
 return item > 5
})
//=》结果是false,因为需要数组的元素都满足大于5
arr.every(item => {
 return item < 100
})
//=》结果是true,数组的所有项都小于100


5.Array.prototype.some()
说明:该方法测试数组内是否有元素满足了提供函数的测试,如果有一个满足就返回true,所有元素都没有通过回调函数的测试返回值才会为false。
参数说明: item  :当前正在被处理的元素,index:当前元素索引,arr:数组本身

arr.some(item => {
  return item > 50
})//=》true,只要有一项满足,就是true


6.Array.prototype.reduce()/Array.prototype.reduceRight()
说明:方法对数组中的每个元素执行一个reducer函数(升序执行),将其结果汇总为单个返回值。
参数说明:

Accumulator (acc) (累计器),

Current Value (cur) (当前值) ,

Current Index (idx) (当前索引) ,

Source Array (src) (源数组)

var arr = [1,2,3,4,5,6,7,89,9,10]
arr.reduce((acc,cur) => {
// 该方法可以指定第二个参数,该参数是第一次遍历acc的值,若不传则是数组的第一个值
  return acc + cur //acc存的是上一次遍历相加的结果
});
136//=》求数组的和
// reduceRight/和reduce的遍历方向是相反的reduceRight从右到左


7.Array.prototype.indexof()/Array.prototype. lastIndexof  ()
说明:方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1

var arr = [1,2,3,4,5,6,7,89,9,10]
arr.indexOf(1)//=》0
arr.indexOf(89)//=》7返回给定元素索引
arr.indexOf(100)//=》-1 元素不存在返回-1
arr.indexOf(3,4)//-1 第二个参数代表开始检索的位置
arr.indexOf(3,-2)//=》-1 索引位置也可以是负数
lastIndexof/和indexof   的遍历方向是相反的lastIndexof从右到左


8.Array.prototype.find()
说明:方法返回数组中满足提供的测试函数的第一个元素的值
参数说明:item  :当前正在被处理的元素,index:当前元素索引,arr:数组本身

const arr1 = [5, 12, 8, 130, 44];
const found = arr1.find(item => item >  10);
console.log(found);//12

9.Array.prototype.flat()
说明:方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
参数说明:depth:指定要提取嵌套数组的结构深度,默认值为 1
 

var deepArr = [1,2,[3,4,[5, 6,[7,8]]]];
deepArr.flat();// [1, 2, 3, 4, Array(3)]
deepArr.flat(Infinity);//[1, 2, 3, 4, 5, 6, 7, 8]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值