数组方法-方法分类

****、总览
方法 功能 返回值 是否改变原数组
push 数组尾部添加元素 返回:添加元素之后数组的长度
unshift 数组首部添加元素 返回:添加元素之后数组的长度
pop 删除数组尾部第一个元素 返回被删除的元素
shift 删除数组首部第一个元素 返回被删除的元素
reverse 数组倒序排列 返回倒叙排列后的数组
sort 对数组元素进行排序 返回排序后的数组
splice 数组中插入或删除元素(注意:不同个数参数区别) 返回被删除元素组成的数组
copyWithin 将指定位置的元素复制到其他位置 返回更换后的数组
fill 填充数组(替换数组元素) 返回填充后的数组
- - - -
join 将数组元素转化为字符串拼接一起 返回拼接后生成的字符串
concat 创建并返回一个新的合并数组 返回原数组和参数组数合并后的数组
slice 分割数组(注意:1个参数,2个参数区别) 返回被分割出来的数组
map 遍历数组,返回一个新数组 返回新数组
filter 遍历数组,条件过滤,返回一个符合条件的新数组 返回符合条件的新数组

1-5

    // 1、push()  数组尾部添加元素,返回值为数组长度, 参数:item1,item2,itemX......
    let arr = [1, 2, 3]
    console.log(arr.push('a')) // 4
    console.log(arr) // [1, 2, 3, 'a']

    // 2、unshift() 数组首部添加元素,返回值为数组长度, 参数:item1,item2,itemX......
    let arr = [1, 2, 3]
    console.log(arr.unshift('a')) // 4
    console.log(arr) // ['a', 1, 2, 3]

    // 3、pop() 数组首部添加元素,返回值为被删除的元素, 参数:无
    let arr = [1, 2, 3]
    console.log(arr.pop()) // 3
    console.log(arr) // [1, 2]

    // 4、shift() 数组首部删除元素,返回值为被删除的元素, 参数:无
    let arr = [1, 2, 3]
    console.log(arr.shift()) // 1
    console.log(arr) // [2, 3]

    // 5、reverse() 将数组倒叙排列, 返回倒叙排列后的数组, 参数:无
    let arr = [1, 2, 3]
    console.log(arr.reverse()) // [3, 2, 1]
    console.log(arr) // [3, 2, 1]

6、sort() 将数组倒叙排列, 返回倒叙排列后的数组

    // 参数(可选): 规定排序的函数
    // 没有传参:默认按字母升序,如果不是元素不是字符串,
    // 会调用toString()方法将元素转化为字符串的Unicode(万国码)位点,然后再比较字符
    // 无参数情况下:
    let arr = [3, 10, 2, 15, 26, 1]
    console.log(arr.sort()) // [1, 10, 15, 2, 26, 3]
    console.log(arr) //[1, 10, 15, 2, 26, 3]

    let arr = ['color', 'red', 'blue']
    console.log(arr.sort()) // ["blue", "color", "red"]
    console.log(arr, 202) // ["blue", "color", "red"]
    // 传参情况下
    // 参数为函数, 函数有两个默认参数a, b; 函数比较两个参数大小
    // 若比较函数返回值 < 0, a 会排在 b 前面
    // 若比较函数返回值 = 0, a 和 b 位置不变
    // 若比较函数返回值 > 0, a 会排在 b 后面

    // sort排序常用方法
    // 1、数组元素为Number类型的升序,降序排列
    let arr = [3, 10, 1, 25, 18]
    // 升序排列
    console.log(arr.sort((a, b) => {return a - b})); // [1, 3, 10, 18, 25]
    console.log(arr); // [1, 3, 10, 18, 25]
    // 降序排列
    console.log(arr.sort((a, b) => {return b - a})); // [25, 18, 10, 3, 1]
    console.log(arr); // [25, 18, 10, 3, 1]

    // 2、数组多条件排序
    let arr = [{id: 1, age: 18}, {id: 3, age: 24}, {id: 2, age: 6}]
    // 按照id 排序
    console.log(arr.sort((a, b) => {return a.id - b.id}));
    [{id: 1, age: 18}, {id: 2, age: 6}, {id: 3, age: 24}]
    // 按照age 排序
    console.log(arr.sort((a, b) => {return a.age - b.age}));
    [{id: 2, age: 6}, {id: 1, age: 18}, {id: 3, age: 24}]

7、splice() 添加/删除数组元素, 返回被删除的元素,(截取包含起始值)

    // 参数:至少两个 splice(index, endIndex)
    // 参数1(必需):index, 添加/删除元素的位置,(使用负数,则从数组尾部定位,最后一个元素index为 -1)
    // 参数2(可选):endIndex, 要删除的元素数量, 若不选,从起始位置到最后的元素都会删除 
    // 如果为0,不删除元素
    // 参数3(可选):item1, item2, itemX....  向数组中添加元素
    let arr = [1, 2, 3, 4, 5]
    // 从2开始,截取后面所有元素
    console.log(arr.splice(2)) // [3, 4, 5]
    console.log(arr); // [1, 2]
    // 从-2 元素倒数第二个截取后面所有元素
    console.log(arr.splice(-2)) // [4, 5]
    console.log(arr) // [1, 2, 3]
    // 从0 开始截取2位元素
    console.log(arr.splice(0, 2)) // [1, 2]
    console.log(arr); // [3, 4, 5]
    // 从1开始截取2个元素之后,添加参数元素
    console.log(arr.splice(1, 2, 'a', 'b')) // [2, 3]
    console.log(arr) // [1, "a", "b", 4, 5]
    // 不删除,只添加元素
    console.log(arr.splice(1, 0, 'a', 'b')) // 没有删除元素, 返回[]
    console.log(arr) // [1, "a", "b", 2, 3, 4, 5]
    console.log(arr.splice(-1, 0, 'a', 'b')) // 没有删除元素, 返回[]
    console.log(arr) // [1, 2, 3, 4, "a", "b", 5]

8、copyWithin() 指定位置的元素复制到其他位置, 返回更换后的数组

    // 参数1(必需):target,从该位置开始替换,若为负数,从尾部开始
    // 参数2(可选):start,从该位置开始读取数据,默认为0,若为负数,从尾部开始
    // 参数3(可选):end,读取到该位置前一个元素(不包含该元素),默认为数组长度,若为负数,从尾部开始
    let arr = [1, 2, 3, 4, 5]
    console.log(arr.copyWithin(1)); // [1, 1, 2, 3, 4]
    console.log(arr); // [1, 1, 2, 3, 4]
    console.log(arr.copyWithin(2, 1, 3)); // [1, 1, 2, 3, 4]

9、fill() 填充数组,返回填充后的数组

    // 参数1(必需):需要填充的值
    // 参数2(可选):填充开始位置,默认为0
    // 参数3(可选):填充结束位置(不包含该位置),默认为数组长度
    let arr = [1, 2, 3, 4]
    console.log(arr.fill(8)); // [8, 8, 8, 8]
    console.log(arr.fill(8, 1)); //[1, 8, 8, 8]
    console.log(arr.fill(8, 1, 3)); // [1, 8, 3, 4]

------------以下方法不改变数组------------
10、join() 把数组通过传入分隔符转为字符串,返回生成的字符串

    // 参数string(可选),默认为逗号 ,
    let arr = [1, 3, 'a']
    console.log(arr.join()); // 1, 3, a
    console.log(arr, 555);
    console.log(arr.join('-')); // 1-3-a

    // 如果数组里面是对象,会直接被转为[object Object],如果使用JSON.stringify()会识别转换
    let arr = [{name: 'zs', id: 1}, 5, 'a']
    console.log(arr.join('+')); // [object Object]+5+a
    console.log([JSON.stringify({name: 'zs', id: 1}), 5, 'a'].join()); // {"name":"zs","id":1},5,a

    // 如果数组里面还是数组,也会调用join()方法,返回值是用逗号隔开的字符串
    let arr = [[1, 2, 'b'], 5, 'a']
    console.log(arr.join('*')); // 1,2,b*5*a

11、slice() 返回一个从起点,到结尾(不包含尾部)所选择的部分数组,浅拷贝到另一个数组, 不改变原数组

    // 参数1(可选),数组索引数值,默认为0
    // 参数2(可选),数组索引数值(不包括),截取到该索引前一个元素
    let arr = [1, 2, 3, 4, 5]
    console.log(arr.slice(0, 2)); // [1, 2]
    console.log(arr.slice(1, 3)); // [2, 3]

    // 浅拷贝
    let arr = [{id: 1}, {id: 2}, {id: 3}, {id: 4}]
    let b = arr.slice(0, 2)
    b[0].id = 8
    console.log(arr); // [{id: 8}, {id: 2}, {id: 3}, {id: 4}]

12、concat() 合并两个或多个数组,返回合并后的数组 (浅拷贝)

    let a = [1, 2, 3]
    let b = [4, 5, 6]
    console.log(a.concat(b)); // [1, 2, 3, 4, 5, 6]
    console.log(a); // [1, 2, 3]
    // 浅拷贝
    let a = [{id: 1}, {id: 2}, {id: 3}, {id: 4}]
    let b = [4, 5, 6]
    let c = a.concat(b)
    console.log(c); // [{id: 1}, {id: 2}, {id: 3}, {id: 4}, 4, 5, 6]
    c[0].id = 8
    console.log(a); // [{id: 8}, {id: 2}, {id: 3}, {id: 4}]

    // 
    let arr = [1, 2, 3]
    console.log(arr.indexOf(2));  // 1
    console.log(arr.indexOf(5)); // -1

13、indexOf() 查找数组是否存在某个元素,找到了返回对应值的索引,没找到返回 -1

    let arr = [1, 2, 3]
    console.log(arr.indexOf(2));  // 1
    console.log(arr.indexOf(5)); // -1

14、includes() 查找数组是否包含某个员数, 返回布尔值

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