不可不说的Array.xxx()(上)

597 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

你真的熟悉数组嘛?你知道小程序经常使用的数组方法吗?数组方法很多,也总是让人记不住,本文将摘选一些在小程序中经常使用的方法,包括数组迭代方法,以及一些在算法题目上屡用不爽的简单方法,快来看看吧~。

一、必须熟悉的数组迭代方法

数组迭代--对每个数组项进行操作。 在小程序中,这些迭代方法(遍历方法)不仅可以简写代码,还能节约性能,而且用起来也比较灵活,以后需要操作数组,再也不会只知道循环了。

参数意义
  • total:总数(初始值/先前返回的值)
  • value:项目值
  • index:项目索引
  • array:数组本身
  • item:必需。要检索的项目
  • start:可选。从哪里开始搜索
1、Array.forEach(value,index,array)

(1)不会更改原始数组

const myArray=[1,2,3,4,5];

let alterArray=myArray.forEach(value=>{

 value = value*2;

})

console.log(myArray);//[ 1, 2, 3, 4, 5 ]

console.log(alterArray);//Object [Array Iterator] {}
2、Array.map(value,index,array)

(1)通过对每个数组元素执行函数来创建新数组

(2)不会对没有值的数组元素执行函数

(3)不会更改原始数组

let alterArray1=myArray.map(value=>{

  return value*2;

});

console.log(myArray);//[ 1, 2, 3, 4, 5 ]

console.log(alterArray1);//[ 2, 4, 6, 8, 10 ]

foreach()和map()区别在于:forEach()没有返回值,map()有返回值

3、Array.filter(value,index,array)

(1)创建一个包含通过测试的数组元素的新数组

(2)不会更改原始数组

let alterArray2=myArray.filter(value=>{

  return value%2==0;

});

console.log(myArray);//[ 1, 2, 3, 4, 5 ]

console.log(alterArray2);//[ 2, 4 ]
4、Array.reduce(total, value, index, array)

(1)在每个数组元素上运行函数,以便生成(减少它)单个值

(2)在数组中从左到右工作

(3)不会减少原始数组

(4)可接受一个初始值

let alterArray3=myArray.reduce((total,value)=>{

  return total+value;

});

console.log(myArray);//[ 1, 2, 3, 4, 5 ]

console.log(alterArray3);//15



let alterArray4=myArray.reduce((total,value)=>{

  return total+value;

},100);

console.log(alterArray4);//115
5、Array.reduceRight(total, value, index, array)

(1)在每个数组元素上运行函数,以便生成(减少它)单个值

(2)在数组中从右到左工作

(3)不会减少原始数组

let alterArray5=myArray.reduce((total,value)=>{

  return total+value;

});

console.log(myArray);//[ 1, 2, 3, 4, 5 ]

console.log(alterArray5);//15
6、Array.every(value, index, array)

(1)检查所有数组是否通过测试

let alterArray6=myArray.every((total,value)=>{

  return value%2==1;

});

console.log(alterArray6);//false
7、Array.some(value, index, array)

(1)检查某些数组值是否通过测试

let alterArray7=myArray.some((total,value)=>{

  return value%2==1;

});

console.log(alterArray7);//true
8、Array.indexOf(item, start)

(1)如果未找到项目,Array.indexOf() 返回 -1。

(2)如果项目多次出现,则返回第一次出现的位置。

(3)start:可选。从哪里开始搜索。负值将从结尾开始的给定位置开始,并搜索到结尾。

let alterArray8=myArray.indexOf(10);

console.log(alterArray8);//-1  
9、Array.lastIndexOf(item, start)

(1)start 可选。从哪里开始搜索。负值将从结尾开始的给定位置开始,并搜索到开头。

let alterArray9=myArray.indexOf(10);

console.log(alterArray9);//-1  
10、Array.find(value, index, array)

(1)返回通过测试函数的第一个数组元素的值

let alterArray10=myArray.find(value=>{

  return value>3;

});

console.log(alterArray10);//4
11、Array.findIndex(value, index, array)

(1)返回通过测试函数的第一个数组元素的索引

let alterArray11=myArray.findIndex(value=>{

  return value>3;

});

console.log(alterArray11);//3

二、必须会的简单方法

1、反转

--Array.reverse()

const arr=[1,2,3,4,5]
console.log(arr.reverse());//[ 5, 4, 3, 2, 1 ]

const strArr=['apple','pear','peach','watermelon','strawberry']
console.log(strArr.reverse());//[ 'strawberry', 'watermelon', 'peach', 'pear', 'apple' ]
2、切割

slice()和splice()分不清?不可能!先看例子:

(1)--slice() 方法用数组的某个片段切出新数组

// 一个参数时,比如从数组元素 ("myself")开始切出一段数组
const person=['grandfather','grandmother','father','mother','brother','sister','myself','son','dauther'];
console.log(person.slice(person.indexOf('myself')));//从起点开始切到最后 [ 'myself', 'son', 'dauther' ]
console.log(person.slice(-2));//反方向切2个元素  [ 'son', 'dauther' ]
console.log(person);//slice() 方法创建新数组,不改变原数组

// 两个参数时,比如从数组元素“grandfather”切到“myself”
console.log(person.slice(person.indexOf('grandfather'),person.indexOf('myself')));//切左不切右
//[ 'grandfather', 'grandmother', 'father' ,'mother','brother','sister']

--splice() 方法可用于向数组添加新项,或者在数组中不留“空洞”的情况下移除元素

// 第一个参数:添加新元素的位置(拼接)。
// 第二个参数:删除多少元素。
// 其余参数:要添加的新元素。
// splice() 方法返回一个包含已删除项的数组
const myArr=['you','are','a','big','banana','!']
// 现在在"are"后面添加"not"
myArr.splice(2,0,'not')
console.log(myArr);//会改变原数组   [ 'you', 'are', 'not', 'a', 'big', 'banana', '!' ]

// 能够使用 splice() 在数组中不留空洞的情况下移除元素
// 第一个参数:新元素应该被添加(接入)的位置。
// 第二个参数:删除几个元素。
// 现在删除末尾的感叹号"!"
console.log(myArr.splice(myArr.length-1,1));//返回被删除的元素 [ '!' ]
console.log(myArr);//会改变原数组  [ 'you', 'are', 'not', 'a', 'big', 'banana' ]

综上所述:

slice()和splice()的区别有以下几点:

(1)作用不同

(2)slice()不会改变原数组,splice()会改变原数组

(3)slice()返回的是切出的新片段,splice()返回的是删除的元素

3、类型转换

--tostring()和join(),以及Array.from()

// toString() 把数组转换为数组值(逗号分隔)的字符串。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
console.log( fruits.toString());//Banana,Orange,Apple,Mango

// join() 方法也可将所有数组元素结合为一个字符串。行为类似 toString(),但是可以规定分隔符
console.log(fruits.join("")); //BananaOrangeAppleMango

// Array.from(),将其他类型转为数组
var str='abcdef';
console.log(Array.from(str));//[ 'a', 'b', 'c', 'd', 'e', 'f' ]
4、排序

排序炒鸡简单,只需要记住一行代码既可。

let arr=[11,54,23,45,67,12,34];
arr=arr.sort((a,b)=>a-b);//升序 [11,12,23,45,54,67]
// arr=arr.sort((a,b)=>b-a);//降序 [67, 54, 45, 34,23, 12, 11]
console.log(arr);

总结

以上方法都是在小程序中比较常见的方法,快快过个眼吧~。有遗漏的,评论区补充。