数组的常用方法

150 阅读5分钟

1. map

返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值

  {
  name: 'jack',
  age: 18,
},
{
  name: 'mad',
  age: 20,
}
]

// 想到给每一项加个 child
const res = [
  {
  name: 'jack',
  age: 18,
  child: '没有'
},
{
  name: 'mad',
  age: 20,
  child: '有'
}
]

// 怎么做
const a = a.map(function(item, index) {
  // ...obj, es6 浅拷贝对象
  return {
    ...item,
    child: '有'
  }
  
  // es5 浅拷贝对象
  return Object.assign(item, {child: '有'})
})

image.png

2.filter

filter 汉语意思 '过滤'

根据某个条件,从数组中过滤出你想要的子数组

const a = [
  {
  name: 'jack',
  age: 18,
},
{
  name: 'mad',
  age: 20,
},
 {
  name: 'ha',
  age: 30,
 },
 {
  name: 'ha',
  age: 60,
 }
]

// 数组里面,我只想要 age 大于25的子数组
const res = [
 {
  name: 'ha',
  age: 30,
 },
 {
  name: 'ha',
  age: 60,
 }
]


const b = a.filter(function(item, index) {
  if (根据某个条件) {
    return true
  }
})

image.png

3. find

find,汉语意思 '找到'

根据某个条件,从数组中 找到第一个 满足条件的元素

const a = [
  {
  name: 'jack',
  age: 18,
},
 {
  name: 'aaa',
  age: 60,
 },
{
  name: 'mad',
  age: 20,
},
 {
  name: 'ha',
  age: 30,
 },
 {
  name: 'ha',
  age: 60,
 }
]

// 想到得到 age: 60 的第一个

let b = a.find(function(){
  if (某个条件) {
    return true
  }
})

image.png

4. forEach

和 for 循环一样

const a = [
  {
  name: 'jack',
  age: 18,
},
 {
  name: 'aaa',
  age: 60,
 },
{
  name: 'mad',
  age: 20,
},
 {
  name: 'ha',
  age: 30,
 },
 {
  name: 'ha',
  age: 60,
 }
]

5.commodity

commodity 判断一个值是否存在 存在返回 true 不存在返回false

6.reduce

educe 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。

7.Object.keys()

Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致。

image.png

8.object.values()

Object.values() 方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用 for...in 循环的顺序相同(区别在于 for-in 循环枚举原型链中的属性)。

image.png

9. ...拓展运算符

可以将一个数组转为用逗号分隔的参数序列。

image.png

image.png

10. join (原数组不受影响)

该方法可以将数组里的元素,通过指定的分隔符,以字符串的形式连接起来。
返回值:返回一个新的字符串

//将数组用 - 符号连接起来let arr =[1,2,3,4,5];
let str = arr.join('-'); 
console.log(str)//str = 1-2-3-4-5;

11. split (原数组不受影响)

该方法是用过指定的分隔符,将字符串分割成数组
返回值:返回一个新的数组

let str = wqz-ttj;
let arr = str.split('-');
console.log(arr);// arr=['wqz','ttj'];

12. push(数组的最后面添加一个或者多个元素)

该方法可以在数组的最后面,添加一个或者多个元素
结构: arr.push(值)
返回值:返回的是添加元素后数组的长度.

13. pop(数组的最后面,删除一个元素)

该方法可以在数组的最后面,删除一个元素
结构: arr.pop()
返回值:返回的是刚才删除的元素.

14. unshift(数组的最前面,添加一个或者几个元素)

该方法可以在数组的最前面,添加一个或者几个元素
结构: arr.unshift(值)
返回值: 返回的是添加元素后数组的长度

15. shift(数组的最前面,删除一个元素)

该方法可以在数组的最前面,删除一个元素
结构: arr.shift()
返回值: 返回的是刚才删除的元素.

16. reverse (翻转数组)

结构:arr.reserse()

17. sort(排序)

该方法可以对数组进行排序.

let arr = [1,3,5,2,4,23,122,34];
//没有参数:时按照首字符的先后排序
arr.sort()//arr=[1,122,2,23,3,34,4,5];
//有参数
arr.sort(function(a,b){
	return a-b;//从小到大排序
	return b-a;//从大到小排序
})

18.concat(拼接成一个新的数组)

该方法可以把两个数组里的元素拼接成一个新的数组

返回值: 返回拼接后的新数组

let arr1 = [1,2,3];
let arr2 = [4,5,6];
let arr = arr1.concat(arr2);//arr = [1,2,3,4,5,6];
arr1.push(arr2);//arr1 = [1,2,3,[4,5,6]];

19.slice 截取 出来

该方法可以从数组中截取指定的字段,返回出来
返回值:返回截取出来的字段,放到新的数组中,不改变原数组

结构1:arr.slice(start,end) ;从start下标开始截取,一直到end结束,不包括end

let arr = [0,1,2,3,4,5,6,7];
let newArr = arr.slice(0,3)//newArr = [0,1,2];

结构2:arr.slice(start) ;从start下标开始截取,一直到最后

let arr = [0,1,2,3,4,5,6,7];
let newArr = arr.slice(2)//newArr = [2,3,4,5,6,7];

结构3:arr.slice( ) ;全部截取

let arr = [0,1,2,3,4,5,6,7];
let newArr = arr.slice()//newArr = [0,1,2,3,4,5,6,7];

20. splice

结构1: arr.splice(start,deletedCount) 纯删除

从start下标开始,删除几个

结构2: arr.splice(start,deletedCount,item) 替换

从start下标开始,删除几个,并在该位置添加item

结构3: arr.splice(start,0,item) 纯添加

从start下标开始,删除0个,并在该位置添加item,start开始全部往后移动

let arr = [1,2,6,7,8];
arr.splice(2,0,3,4,5);//arr = [1,2,3,4,5,6,7,8];

查找元素在数组中出现的位置

21. indexOf

该方法用来查找元素在数组中第一次出现的位置

结构: arr.indexOf(元素)

特殊用法:

(1) arr.indexOf (ele,fromIndex),从fromIndex这个下标开始,元素第一次出现的位置

用来判断元素是否存在于数组中!

if (arr.indexOf(ele) === -1){//说明元素不存在!!
	console.log('元素不存在!)
} else {
	console.log(' 元素存在! ')
}

22. lastIndexOf

该方法用来查找元素最后一次在数组中出现的位置

23.some

判断数组中有没有符合条件的项(只要有,就返回true),如果一个都没有,才返回false

let arr3 = [
  { name: "zs", age: 18, done: "notYet" },
  { name: "ls", age: 20, done: true },
  { name: "ww", age: 22, done: true }
];
let res5 = arr3.some(function(item) {
  return item.done;
});
console.log(res5);

24. every

判断数组中所有的项是否满足要求,如果全都满足,才返回true,否则返回false

let res6 = arr3.every(function(item) {
  return item.done;
});
console.log(res6);