js数组方法

一. 添加/移除数组元素

1.简单方法

push 方法     —— 从数组尾端添加元素
 let arr = [1,2,3]
 arr.push(...[4,5])
 console.log(arr)  // [1,2,3,4,5]
pop 方法      —— 删除数组最后一个元素
 let arr = [1,2,3]
 arr.pop()
 console.log(arr)  // [1,2]
shift 方法    —— 删除数组首个元素
 let arr = [1,2,3]
 arr.shift()
 console.log(arr)  // [2,3]
unshift 方法  —— 从数组首端添加元素
 let arr = [1,2,3]
 arr.unshift(0)
 console.log(arr)  // [0,1,2,3]
slice 方法    —— 截取数组
 let arr = [1,2,3]
 let newArr = arr.slice(0,2)
 console.log(newArr)  // [1,2]
concat 方法   —— 创建一个新数组,其中包含来自于原数组、其他数组和其他项的值
 let arr = [1,2,3]
 let newArr = arr.concat([3, 4], 5, 6)
 console.log(newArr)   // [1,2,3,4,5,6]

2.复杂方法

splice 方法   —— 全面方法,可以添加,删除和插入元素

语法是:从索引 start 开始修改 arr,删除 deleteCount 个元素并在当前位置插入 elem1, ..., elemN。最后返回已处理完的数组

 arr.splice(start, deleteCount, elem1, ..., elemN)

删除

let arr = [1, 2, 3]
arr.splice(1, 1) // 从索引 1 开始删除 1 个元素
console.log( arr ) // [1, 2]

替换

let arr = [1, 2, 3]
arr.splice(0, 2, -1, -2) // 从索引 0 开始删除 2 个元素,插入的-1和-2其中-1成为新的索引0
console.log( arr ) // [-1, -2, 3]

截取

let arr = [1, 2, 3]
let newArr = arr.splice(0, 2) // 从索引 0 开始删除 2 个元素,但是删除的元素被newArr截取
console.log( newArr ) // [1, 2]

插入

let arr = [1, 2, 5]
arr.splice(2, 0, 3, 4) // 从索引 2 开始删除 0 个元素,插入的3和4其中3成为新的索引2
console.log( arr ) // [1, 2, 3, 4, 5]

负索引

let arr = [1, 2, 5]
rr.splice(-1, 0, 3, 4) // 从索引 -1(倒数第二位) 开始删除 0 个元素,插入3和4
console.log( newArr ) // [1, 2, 3, 4, 5]

二. 遍历数组元素

forEach 方法  —— 为数组的每个元素都运行一个函数
 let arr = ['a','b','c']
 arr.forEach((item, index, array) => {
  console.log(`对象是${item},索引是${index},原数组是${array}`);
});

// 对象是a,索引是0,原数组是a,b,c
   .
   .
for 方法  —— 为数组的每个元素都运行一个函数
 let arr = ['a','b','c']
 for (let item of arr) {
   console.log( `对象是${item}` );
 }
 // 对象是a
   .
   .

三. 在数组中搜索

1.简单数组搜索方法

indexOf /lastIndexOf / includes 方法  —— 数组中进行搜索

语法是 a.从from索引开始搜索item,找到返回索引,找不到返回-1(从左往右)

    b.从from索引开始搜索item,找到返回索引,找不到返回-1(从右往左)

    c.从from索引开始搜索item,找到返回true,找不到返回false

a.arr.indexOf(item, from) 
b.arr.lastIndexOf(item, from)
c.arr.includes(item, from)
let arr = ['a','b','c','d','a'];
let newArr1 = arr.indexOf('a')      // 0
let newArr2 = arr.lastIndexOf('a')  // 4
let newArr3 = arr.includes('a')     // true

也可以在字符串中搜索

let arr = 'abcda;
let newArr1 = arr.indexOf('a')      // 0
let newArr2 = arr.lastIndexOf('a')  // 4
let newArr3 = arr.includes('a')     // true

2.对象数组搜索方法

find 方法

一旦返回true,则停止搜索,返回item,故只能返回一个item,即第一个匹配的item。如果没有搜索到,则返回undefined

let arr =[
  {id: 1, name: "张三"},
  {id: 2, name: "李四"},
  {id: 3, name: "王五"}
];
let user = arr.find((item, index, array)=> {
  return item.id == 1
});
console.log(user.name) // 张三
filter 方法

一旦返回true,不会停止搜索,会返回所有匹配值组成的数组,即第一个匹配的item。如果没有搜索到,则返回undefined

let arr =[
  {id: 1, name: "张三"},
  {id: 2, name: "李四"},
  {id: 3, name: "王五"}
];
let user = arr.find((item, index, array)=> {
  return item.id < 3
});
console.log(user)
// [
    {id: 1, name: "张三"},
    {id: 2, name: "李四"}
   ]

四. 转换数组

map 方法  —— 它对数组的每个元素都调用函数,并返回结果新数组,但不会改变原数组
let arr = ['name','sex','class']
let newArr = arr.map((item, index, array) => {
  return item.length
});
console.log(newArr) // [4,3,5]
sort 方法  —— 对数组进行排序

按照数字排序

let arr = [1,15,2]
arr.sort((a, b) => a - b)
console.log(arr) // [1,2,15]

按照字母排序

let arr = ['Österreich','Andorra','Vietnam']
arr.sort((a, b) => a.localeCompare(b));
console.log(arr) // ['Andorra','Österreich','Vietnam']
reverse 方法  —— 颠倒数组
let arr = [1, 2, 3]
arr.reverse()
console.log(arr) // [3,2,1]
split / join 方法  —— 数组 / 字符串互转

说简单一点就是字符串转数组 / 数组转字符串

let name = '张三, 李四, 王五'
let arr = name.split(', ')
console.log(arr) // ['张三', '李四', '王五']
let arr = ['张三', '李四', '王五']
let name = arr.join(', ')
console.log(name) // '张三, 李四, 王五'
reduce / reduceRight 方法  —— 数组相加

reduce语法:a第一次等于0,然后依次循环item相加(从左往右)

reduceRight语法:a第一次等于0,然后依次循环item相加(从右往左)

let arr = [1, 2, 3, 4, 5];
let newArr = arr.reduce((a, b) => a + b, 0);
console.log(newArr); // 15
Array.isArray 方法  —— 判断数据类型是不是数组
let arr = [];
let obj = {}
console.log(Array.isArray(arr)) // true
console.log(Array.isArray(obj)) // false

五. 数组方法备忘单

现代js教程-数组方法

image

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 数组的排序 sort()方法排序问题。 sort()方法是Array原型链上自带的方法。 默认排序顺序是根据字符串...
    无迹落花阅读 582评论 1 0
  • 数组的创建方式1.字面量的形式:var arr=[1,2,3];1.构造函数:var arr1=new Array...
    飘曳_87de阅读 224评论 0 0
  • concat():用于连接两个或多个数组。不会更改现有数组,而是返回一个新数组 let arr1 = ['Java...
    huangxiaohui90阅读 204评论 0 0
  • 位置方法: indexOf(查找值)//默认从索引0开始查找 indexOf(查找值,从哪里开始找(索引)) la...
    EO_eaf6阅读 168评论 0 0
  • 数组方法 改变原数组 push() :将参数添加到数组尾部返回添加后的数组的长度 pop() : 将参数从数组尾部...
    熬得萨菲阅读 1,867评论 0 0