JavaScript数组方法

数组方法

1. 修改器方法

  • copyWithin()ES6

在数组内部, 将一段元素序列拷贝到另一段元素序列上, 覆盖原有的值

var a = [1, 2, 3, 4, 5]
a.copyWithin(0, 3)
console.log(a) // [4, 5, 3, 4, 5]
// 可以接受三个参数 Array.copyWithin(target[, start][, end])
// target(必须): 从该位置开始替换数据, 如果为负数, 表示倒数
// start(可选): 从该位置开始读取数据,默认为0. 如果为负数, 表示倒数
// end(可选): 到该位置前停止读取数据, 默认等于数组长度. 如果为负值,表示倒数
var b = [1, 2, 3, 4, 5]
b.copyWithin(0, -2, -1)
console.log(b) // [4, 2, 3, 4, 5]
  • fill()ES6

将数组中指定区间的所有元素的值, 都替换成某个固定的值

var a = ['a', 'b', 'c']
a.fill(7) // 传一个参数时, 数组内的每一项都会被7替换
console.log(a) // [7, 7, 7]

var b = ['d', 'e', 'f']
b.fill(7, 1) // 传两个参数, 第一个表示使用该参数去替换, 第二个表示从该索引开始直到最后
console.log(b) // ['d', 7, 7]

var c = ['g', 'h', 'i']
c.fill(7, 1, 2) // 传3个参数时, 第一个参数代表使用该参数去替换, 第二个参数表示从该索引开始, 
console.log (c) // ['c', 7, 'e']
  • pop()

删除数组的最后一个元素, 并返回这个元素

var a = [1, 2, 3, 4]
a.pop() // 4
console.log(a) // [1, 2, 3]
  • push()

在数组的末尾增加一个或多个元素, 并返回数组的新长度

var a = []
a.push(1, 2, 3) // 返回数组长度
console.log(a) // [1, 2, 3]
  • reverse()

颠倒数组中元素的排列顺序, 即原先的第一个变为最后一个, 原先的最后一个变为第一个.

var a = [1, 2, 3]
a.reverse() // [3, 2, 1]
  • shift()

删除数组的第一个元素, 并返回这个元素.

var a = [1, 2, 3]
a.shift() // 1
console.log(a) // [2, 3]
  • sort()

对数组元素进行排序, 并返回当前数组

// 数组是字母
var a = ['banana', 'cherry', 'apple']
a.sort()
console.log(a) // ['apple', 'banana', 'cherry']
// 数组是数字
var b = [33, 4, 1111, 222]
b.sort()
console.log(b) // [1111, 222, 33, 4] 首个数字进行排序

b.sort(function(a, b){
    return a-b
})
console.log(b) // [4, 33, 222, 1111] 从小到大排序

b.sort(function(a, b){
    return b-a
})
console.log(b) // [1111, 222, 33, 4] 从大到小排序
  • splice()

在任意的位置给数组添加或删除任意个元素

var a = [1, 2, 3, 4, 5, 6, 7, 8]
a.splice(4) // [5, 6, 7, 8]
console.log(a) // [1, 2, 3, 4] 会改变原数组

var b = [1, 2, 3, 4]
b.splice(1, 2) // [2, 3]
console.log(b) // [1, 4]

var c = [1, 2, 3, 4, 5]
c.splice(2, 0, 'a', 'b') // []
console.log(c) // [1, 2, 'a', 'b', 3, 4, 5]
  • unshift()

在数组的开头增加一个或多个元素, 并返回数组的新长度

var a = [1, 2, 3]
a.unshift(0) // 4
console.log(a) // [0, 1, 2, 3]

2. 访问方法

  • concat()

返回一个由当前数组和其他若干个数组或者若干个非数组值组合而成的新数组

var a =[1, 2, 3]
a.concat(4, 5) // [1, 2, 3, 4, 5]
console.log(a) // [1, 2, 3] 不会改变原数组
a.concat([4, 5]) // [1, 2, 3, 4, 5]
a.concat([4, 5], [6, 7]) // [1, 2, 3, 4, 5, 6, 7]
a.concat(4, [5, [6, 7]]) // [1, 2, 3, 4, 5, [6, 7]]
  • includes()ES6

判断当前数组是否包含某指定的值, 如果是返回 true, 否则返回 false

var a = [1, 2, 3]
a.includes(1) // true
a.includes(4) // false
  • indexOf()

返回数组中第一个与指定值相等的元素的索引, 如果找不到这样的元素, 则返回-1

var a = [0, 1, 2, 1, 0]
var b = a.indexOf(1)
console.log(b) // 1
  • join()

连接数组所有元素组成一个字符串

var a = [1, 2, 3]
a.join() // '1, 2, 3'
a.join('') // '123'
a.join(' ') // '1 2 3'
  • slice()

抽取当前数组中的一段元素组合成一个新数组

var a = [1, 2, 3, 4, 5]
a.slice(0, 3) // [1, 2, 3] 第一个参数是索引,第二个参数为正数n,代表截取n个
a.slice(3) // [4, 5] 只传一个参数m,代表从索引从m开始截取,到最后
a.slice(1, -1) // [2, 3, 4] 如果第二个参数为负数-n,则代表从截取到倒数n+1个
  • lastIndexOf()

返回数组中的最后一个 (从右边数第一个) 与指定值相等的元素的索引, 如果找不到这样的元素, 则返回-1

var a = [0, 1, 2, 1, 0]
var b = a.lastIndexOf(1)
console.log(b) // 3
  • toLocaleString()

返回一个由所有数组元素组合而成的本地化后的字符串. 遮蔽了原型链上的

var a = [1, 2, 3]
a.toLocaleString() // '1, 2, 3'
console.log(a) // [1, 2, 3] 不改变原数组

var b = [1, [2, 'c']]
b.toLocaleString() // '1, 2, c'
  • toString()

返回一个由所有数组元素组合而成的字符串. 遮蔽了原型链上的

var a = [1, 2, 3]
a.toString() // '1, 2, 3'
console.log(a) // [1, 2, 3] 不改变原数组

var b = [1, [2, 'c']]
b.toString() // '1, 2, c'

3. 迭代方法

  • entries()ES6

返回一个数组迭代器对象, 该迭代器会包含所有数组元素的键值对

var a = ['apple', 'banana', 'cherry']
// a.entries() 返回Iterator遍历器对象, 可以使用for...of循环遍历
for(let [index, item] of a.entries()){
    console.log(index, item)
}
// 0 'apple'
// 1 'banana'
// 2 'cherry'
  • every()

如果数组中的每个元素都满足测试函数, 则返回 true, 否则返回 false

var a = [1, 2, 3, 4, 5]
var b = a.every(function(item){
    return item < 10
})
console.log(b) // true
  • filter()

将所有在过滤函数中返回 true 的数组元素放进一个新数组中,并返回

var a = [1, 2, 3, 4]
var b = a.filter(function(item){
    return item > 2
})
console.log(b) // [3, 4]
  • find()ES6

找到第一个满足测试函数的元素并返回那个元素的值, 如果找不到, 则返回 undefined

var a = [1, 2, 3, 4, 5]
a.find(function(item){
    return item > 2
}) // 3
  • findIndex()ES6

找到第一个满足测试函数的元素并返回那个元素的索引, 如果找不到, 则返回-1

var a = [5, 2, 7, 8, 9]
a.findIndex(function(item){
    return item > 5
}) // 2
  • forEach()

为数组中的每个元素执行一次回调函数

// 将a内的每一项相加
var a = [1, 2, 3, 4, 5]
var sum = 0;
a.forEach(function(value){
    sum += value
})
console.log(sum) // 15

var b = []
a.forEach(function(value, index){
    b[index] = value
})
console.log(b) //
  • keys()ES6

返回一个数组迭代器对象, 该迭代器会包含所有数组元素的键

var a = ['apple', 'banana']
// a.keys 返回Iterator遍历器对象,可以使用for...of遍历
for(let index of a.keys()){
    console.log(index)
}
// 0
// 1
  • map()

返回一个由调函数的返回值组成的新数组

var a = [1, 2, 3]
b = a.map(function(item){
    return item * item
})
console.log(b) // [1, 4, 9]
  • reduce()

从左到右为每个数组元素执行一次回调函数, 并把上次回调函数的返回值放在一个暂存器中传给下次回调函数, 并返回最后一次回调函数的返回值

var a = [1, 2, 3, 4]
var sum = a.reduce(function(x, y){
    return x + y
}, 5)
console.log(sum) // 15 如果传入第二个参数,则第二个参数也会执行回调函数
  • reduceRight()

从右到左为每个数组元素执行一次回调函数, 并把上次回调函数的返回值 放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值

var a = [2, 3, 4] // 计算2^(3^4)
var b = a.reduceRight(function(a, b){
    return Math.pow(b, a)
})
console.log(b) // 2.4178516392292583e+24
  • some()

如果数组中至少有一个元素满足测试函数, 则返回 true, 否则返回 false

var a = [1, 2, 3, 4, 5]
var b =a.some(function(item){
    return item % 2 ===0 
})
console.log(b) // true
  • values()ES6

返回一个数组迭代器对象, 该迭代器会包含所有数组元素的值

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

推荐阅读更多精彩内容