js 数组常用方法总结

map、forEach、concat、join、reverse、push、pop、shfit、unshfit、slice、splice、indexOf、includes、some、flat、fill、toString、find、findIndex、Array.isArray、Array.from、Array.of

1.map():
数组映射

用法1:用于遍历整个数组,返回一个新的数组
var arr = [2,21,12,11]
var newarr = arr.map(item => {
  return item + 1
})
arr: [2,21,12,11]
newarr:[3,22,13,12] 
备注:map不会改变原数组,会直接返回一个新的数组,这个map与forEach用法的本质区别
用法2:可以遍历数组对象中的属性
let obj = [
{zs:1,age:2,address:'南京'},
{zs:33,age:21,address:'南京2'}
]
obj.map(item => {
 return item.address
})
["南京", "南京2"]

2.forEach():
数组遍历

let arr = [11,21,13,14,25]
arr.forEach((item,index,arr) => { // 分别代表元素,下标, 原数据

})
let arr = [1, 2, 3, 4, 5]
arr.forEach((item, index) => {
arr[index] = item  +1
})
arr: [2, 3, 4, 5, 6]

let arr1 = [1,2,3,4,5]
arr1.map((item, index)=> {
 arr1[index] = item +1 
})
因为map中没有使用return,会直接返回
[undefined, undefined, undefined, undefined, undefined], 
但是由于map中也直接对arr1数组进行了操作,
所以arr1的原值也被改变了
  1. concat():
    用于拼接多个数组
let arr = [1,23,4,45,21]
let arr1 = [6,3]
let arr2 = [77,12]
arr.concat(arr1,arr2)
[1, 23, 4, 45, 21, 6, 3, 77, 12]
  1. ‘’():
    用于拼接数组成字符串,join传的参数未分隔符
let arr = [1,3,4,123,4]
arr.join(',')
"1,3,4,123,4"
备注与之对应的是字符串的split方法
"1,3,4,123,4".split(',')
 ["1", "3", "4", "123", "4"]

5.reverse()
用于将数据中的数据进行反转

let arr = [2,32,31,23,4,24]
arr.reverse()
(6) [24, 4, 23, 31, 32, 2]
  1. push() & pop() & shfit() & unshift()
    数组首尾添加或者删除元素
let arr = [1,2] // 往数组的末尾插入数据
arr.push(3)
arr: [1,2,3]
let arr = [1,2] // 从数组的末尾取出最后一个元素,并返回末尾元素的值,原数组被改变
let tmp = arr.pop()  //  tmp = 2

let arr = [1,2] // 在数组的头部插入一个元素,原数组被改变
arr.unshift(0)
arr: [0,1,2]
let arr = [1,2,3] // 从数组的头部取出第一个元素,并返回第一个元素的值,原数组被改变
let tmp = arr.shift()  // tmp = 1
arr: [2,3]
  1. slice() 和splice()用法区别
    slice(起始数组下标,结束数组下标): 从数组中取出 从 起始下标 到 结束下标的数组,返回一个新的数组 不会改变原数组里面的元素
let arr = [11,2,13,6,67]  // 从前往后数组下标为0,1,2,3 从后往前 数组下标为-1,-2,-3
arr.slice(0,3) //  [11,2,13] 取下标0到3的但是不包含下标3的数组元素
arr: [11,2,13,6,67] // 原数组中的元素不会被改变

(下标可以为负数)
let arr = [11,2,13,6,67] 
arr.slice(2,-1) // 返回 [13,6]
/*
 * arr1.splice(a,b,c)
 *    a: 操作的对应下标
 *    b: 删除个数
 *    c: 添加元素(多个用逗号隔开)--可省略
*/
let arr = [11,34,8,12]
let arrtmp = arr.splice(1,2, ...[23,17,19])
arrtmp: [34,8]  // 从原数组中 输出下标1,开始的2个元数,此时返回[34,8]

同时有插入了 [23,17,19]新元素
此时arr : [11,23,17,19,12]
  1. indexOf()
    判断数组里面是否存在对应的值,存在则返回该值第一次出现时所在的下标,不存在则返回-1
[3,5,2].indexOf(2) // 2
[3,5,2].indexOf(7) // -1
备注: 字符串中也有indexOf的方法
'zs'.indexOf('s')  // 1
'zs'.indexOf('k') // -1
  1. includes()
    判断数组中是否有对应的值存在,存在为true ,不存在为false
[43,6,11].includes(8)
false
[43,6,11].includes(11)
true
  1. every()
    判断数组中每一项是否都满足某一个条件,返回true / false
let arr = [2,12,32,6,11]
arr.every( item => { return item > 1 } )
true // 数组中所有的元素都大于1,所以返回了true
arr.every( item => { return item > 11 } )
false // 数组中并不是所以的元素都大于1,所以返回了false
  1. some()
    判断数组中至少某一项满足某个条件 true / false
let arr = [2,12,32,6,11]
arr.some(item => { return item > 32 })
false
arr.some(item => { return item > 31 })
true

12.flat(depth) :
用于展开平铺嵌套数组
depth 可选
指定要提取嵌套数组的结构深度,默认值为 1。
Infinity:展开任意深度的嵌套数组

let arr = [2,12,22, [1,2, [77]]]
arr.flat(1)
(6) [2, 12, 22, 1, 2, Array(1)]
arr.flat(2)
(6) [2, 12, 22, 1, 2, 77]

注意:
arr:  [2,12,22, [1,2, [77]]]  // 原数组不会被更改

arr.flat(Infinity)
(6) [2, 12, 22, 1, 2, 77]
  1. fill(item, start, end) 用法:
    item: 填充数组的元素
    start: 起始位置
    end: 结束位置
let arr = [1,2,3,4,5,6,7,8]
arr.fill(11)
arr: [11, 11, 11, 11, 11, 11, 11, 11] // 不加start end标记,默认填充替换整个数组

let arr = [1,2,3,4,5,6,7,8]
arr.fill(11, 3)
arr: [1, 2, 3, 11, 11, 11, 11, 11] // 只有一个start的话,默认从start到数组结尾填充替换

let arr = [1,2,3,4,5,6,7,8]
arr.fill(11, 3,7)
arr: [1, 2, 3, 11, 11, 11, 11, 8] // 从start 开始 到end (不替换end位置上的数据)
  1. toString() 将数组转换成字符串
let arr = [1,2,3,4,5]
arr.toString()
"1,2,3,4,5"
  1. find()
    find((item, index, arr) => {})
    数组从左往右进行查找,返回数组中第一个数组成员符合条件的元素,未找到则返回 undefined
let arr = [1,23,11,22,12]
let a = arr.find((item, index, arr) => {
  return item === 23
})
a: 23  // 找到

let arr = [1,23,11,22,12]
let a = arr.find((item, index, arr) => {
  return item === 27
})
a: undefined // 未找到

let arr = [{zs: 1},{zs: 34},{zs: 54}]

let a = arr.find((item, index, arr) => {
  return item.zs === 1
})
a: {zs: 1}
  1. findIndex()
    数组从左往右进行查找,返回数组中第一个数组成员符合条件的元素的数组下标,未找到则返回 -1
let arr = [{zs: 91},{zs: 34},{zs: 54}]
let a = arr.findIndex((item, index, arr) => {
  return item.zs < 35
})
a: 1

let arr = [{zs: 91},{zs: 34},{zs: 54}]
let a = arr.findIndex((item, index, arr) => {
  return item.zs === 0
})
a: -1
  1. Array.isArray()
    判断是否为数组
let arr = [1]
let arr1 = {}
Array.isArray(arr)
true
Array.isArray(arr1)
false
  1. Array.from()
    将类数组对象转换成 数组
let arr = {
 0: 'zs',
 1: 'zy',
 length: 2
}
Array.from(arr)
(2) ["zs", "zy"]

let arr = {
 0: 'zs',
 1: 'zy',
 length: 4
}
Array.from(arr)
(4) ["zs", "zy", undefined, undefined]
--------------------------------------------------------------
let arr = {
 0: 'zs',
 1: 'zy'
}
Array.from(arr)
[]

let arr = {
 zs: 'zs',
 zy: 'zy',
 length: 2
}
Array.from(arr)
(2) [undefined, undefined]

总结: 
1. 类数组对象必须有length属性,否则会生成 [] 空数组
2. 类数组的key值必须为 数字 (0,1,2 ....) 或者 数字的字符串 ('0', '1', '2'.....) 形式

19.Array.of()
将一组值转化成数组形式

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