JavaScript 数组方法精讲

51 阅读4分钟

Javascript 数组核心方法

数组迭代方法

forEach ------修改数组元素

仅对元素值操作,不改变原数组;通过数组索引操作,改变原数组

var arr = [1,2,3,4,5];
arr.forEach((value,index,array)=>{
    value += 1
})
console.log(arr)//[1, 2, 3, 4, 5]
arr.forEach((value,index,array)=>{
    array[index] = value+1
})
console.log(arr)//[2, 3, 4, 5, 6]

map ----------返回一个新的数组元素,需要return值来改变数组

var arr2 = [1,2,3,4,5];
var data = arr2.map(x=>x*x);//const double = ele => ele * 2   console.log(arr.map(double));
console.log(data)

for of -------遍历数组中的值进行求和等操作

var arr3 = [1,2,3,4,5]; 
var sum = 0; 
for(let item of arr3){
    sum = sum + item;
} 
console.log(sum)

filter -------过滤数组中的元素 返回一个新的数组元素

var arr6 = [1,2,3,4,5,6,7,8];
var data = arr6.filter(x=>x<5);//断言函数为false的会被过滤掉
console.log(data)

//对象数组  json格式  保留num为2的
var newarr = [{ num: 1, val: 'ceshi', flag: 'aa' },
 { num: 2, val: 'ceshi2', flag: 'aa2' }]
console.log(newarr.filter(item => item.num===2 ))

//数组去重
var arr = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7,8,8,0,8,6,3,4,56,2];
var arr2 = arr.filter((x, index,self)=>self.indexOf(x)===index) 
console.log(arr2); 
//[1, 2, 3, 4, 5, 6, 7, 8, 0, 56]

every ------不改变原数组 存在不满足的即返回false

some -----不改变原数组 存在满足的即返回true

var computers = [
  { name: "mac", ram: 32 },
  { name: "mac", ram: 8 },
  { name: "IBM", ram: 16 },
  { name: "IBM", ram: 64 }
];
var everyComputerCan;
var someComputerCan;
//判断每一个元素的ram是否都大于16
var everyBoolan = computers.every((item) =>{return item.ram > 16});
//判断元素的ram是否存在大于16
var someBoolean = computers.some((item)=> {return item.ram > 16;});
console.log(everyBoolan); //结果:false
console.log(someBoolean);//结果: true

修改数组元素的方法,改变原数组

push pop unshift shift-----添加删除 数组中的首尾数据 返回一个新的数组元素

var array = [1,2,3,4,5];
array.push(6);
console.log(array)//[1, 2, 3, 4, 5, 6]
array.pop()
console.log(array)//[1, 2, 3, 4, 5]
array.unshift(-3,-2,-1);
console.log(array)//[-3, -2, -1, 1, 2, 3, 4, 5]
array.shift()
console.log(array)//[-2, -1, 1, 2, 3, 4, 5]

splice() -------在任意位置增加,删除或替换元素

1.删除 传递2个参数 比如 splice(0,2) 删除第一个元素的位置和删除元素的数量

2.插入 传递3个参数,也可以4个参数,5个参数... 比如splice(2,0,'red','green') 开始位置,要删除的元素数量,要插入的元素 数量(可以多个)

3.替换 传入3个参数,也可以4个参数,5个参数... 比如splice(2,1,'red','green') 开始位置,要删除的元素数量,要插入的元素 数量(可以多个)

var arr5 = [1,2,3,4,5,6,7,8];
arr5.splice(5,3,100,101,102)
console.log(arr5)

var arr6 = [1,2,3,4,5,6,7,8];
var data = arr6.filter(x=>x<5);//断言函数为false的会被过滤掉
console.log(data)

var arr7 = [1,2,3,4,5,6,7,8];
var data = arr7.reduce((a,b)=>a+b)
console.log(data)

数组排序

sort -------对数值数组,字符串数组进行排序

var names = ['Ana','John','ana','john'];
var numbers = [5,3,1,7,9,12,14,8,6];
console.log(numbers.sort());//默认当成字符串进行排序
console.log(numbers.sort((a,b)=>a-b));
console.log(names.sort());
console.log(names.sort((a,b)=>a.localeCompare(b)));

reverse -------反序输出数组

var numbers = [5,3,1,7,9,12,14,8,6];
console.log(numbers.reverse());

搜索数组中的值

includes -------ES2017 数组方法 数组存在值的时候返回false,不存在值的时候返回true

var numbers = [5,3,1,7,9,12,14,8,6];
console.log(numbers.includes(14)) 
console.log(numbers.includes(122))

indexOf -------返回与参数匹配的第一个元素的索引

var numbers = [5,3,1,7,9,12,14,8,6]; 
console.log(numbers.indexOf(1))//2

lastIndexOf ---------返回与参数匹配的最后一个元素的索引

var numbers = [5,3,1,7,9,12,1,14,8,6]; 
console.log(numbers.lastIndexOf(1))//6

find ---------ES2015 找到满足条件的值 会输出第一个符合条件的值

var numbers = [5,3,1,7,9,12,1,14,8,6]; 
console.log(numbers.find(x=>x>6))

findIndex------返回传入一个测试条件(函数)符合条件的数组第一个元素位置

var arr = [1,4,6,8]
arr.findIndex((currentValue, index, arr)=>{
  return currentValue>6
})
//3

at() 方法进行索引 ES2022

通过负值搜索数组末尾的值

let arr = [1,2,3,4,5,6,7,8,9]
console.log(arr.at(-1))//9

数组方法求和-reduce()方法

reduce -------迭代数组的所有项,从第一项开始遍历到最后一项

var arr7 = [1,2,3,4,5,6,7,8]; 
var data = arr7.reduce((a,b)=>a+b)
// 如果没有指定初始值,a第一个值是1,后面是return 的值,b从第二个值开始遍历 
// 如果指定初始值,a第一个值是初始值,后面是return 的值,b从第一个值开始遍历 
console.log(data)

reduceRight------ 迭代数组的所有项,从最后一项开始遍历到第一项

var arr = [1,2,3,4,5,6,7,8]; 
var data = arr7.reduceRight((a,b)=>a+b) 
console.log(data)

数组的转换方法

toString --------数组转换为字符串,默认逗号分割

[1,2,3].toString() //'1,2,3'

join --------数组转换为字符串,自定义分割符

[1,2,3].join('|') //'1|2|3'

数组的迭代器方法

keys() values() entries() -----检索数组内容的3个方法

for(let [index,item] of text.entries()){
    if(index == text.length-1){
         showText = showText+item.specDetailName
    }else{
        showText = showText+item.specDetailName+'/'
    }
}

数组扁平化方法(ES2019)

flat()  函数仅采用一个参数,该参数是可选的,唯一的参数是 depth 参数 默认depth为1

var array1 = [1, 2, [3, 4], [[5, 6]], [[[7, 8]]], [[[[9, 10]]]]];
var array2 = array1.flat(2);
var array3 = array1.flat(4);
console.log(array2)
//[1, 2, 3, 4, 5, 6, Array(2), Array(1)]
console.log(array3)
//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]