Array 中的方法

Array

属性

length

ES5

改变原数组

  • push, pop, unshift, shift
let arr1 = [12, 34, 4, 3, 4, 4];
console.log(arr1.pop()); // 4 返回最后一个删除的元素
console.log(arr1); // [12, 34, 4, 3, 4]
console.log(arr1.push(5)); // 返回数组长度
console.log(arr1);
console.log(arr1.shift()) // 12 返回第一个删除的元素
console.log(arr1); //[ 34, 4, 3, 4, 5 ]
console.log(arr1.unshift(1)); // 返回数组长度
console.log(arr1); //[ 1, 34, 4, 3, 4, 5 ]
  • reverse
    反转数组,返回先数组,原数组也会跟着改变
const array1 = ['one', 'two', 'three'];
const reversed = array1.reverse();
console.log(reversed);//["three", "two", "one"]
console.log(array1);// ["three", "two", "one"]
  • sort
    按照首字母来排序
const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1); //1, 100000, 21, 30, 4]
array1.sort((a, b) => b - a); //[ 100000, 30, 21, 4, 1 ]
array1.sort((a, b) => a - b); //[ 1, 4, 21, 30, 100000 ]
console.log(array1); 
  • splice, slice
    array.splice(start[, deleteCount[, item1[, item2[, ...]]]]), 可以实现数组内容的增删,由被删除的元素组成的一个数组。如果只删除了一个元素,则返回只包含一个元素的数组。如果没有删除元素,则返回空数组。
const months = ['Jan', 'March', 'April', 'June'];
let m = months.splice(1, 0, 'Feb'); //不删除
console.log(months); // [ 'Jan', 'Feb', 'March', 'April', 'June' ] 
console.log(m) //[]
m = months.splice(4, 1, 'May'); //从下标为4开始,删除一个
m.push(3);
console.log(months); //[ 'Jan', 'Feb', 'March', 'April', 'May' ]
console.log(m) //[ 'June', 3 ]
m[0] = 2;
console.log(m) //[ 2, 3 ]

slice方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。

不改变原数组

  • Array.isArray //判断是否是数组
  • concat 返回一个新数组
    var new_array = old_array.concat(value1[, value2[, ...[, valueN]]]);
  • indexOf/ lastIndexOF 返回下标,没有则是-1
  • ** jion,toString, toLocaleString**
    jion 拼接成字符串, 支持参数传递
    toString 返回一个字符串,表示指定的数组及其元素。
    toLocaleString, 返回一个字符串表示数组中的元素。数组中的元素将使用各自的 toLocaleString 方法转成字符串,这些字符串将使用一个特定语言环境的字符串(例如一个逗号 ",")隔开。
    arr.toLocaleString([locales[,options]]);
var prices = ['¥7', 500, 8123, 12];
prices.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' });// "¥7,¥500,¥8,123,¥12"

ES6

改变原数组

  • copyWithin() IE11不支持
    是一个可变方法,它不会改变 this 的长度 length,但是会改变 this 本身的内容,返回一个浅拷贝的数组
    arr.copyWithin(target[, start[, end]]);
let numbers = [1, 2, 3, 4, 5];
numbers.copyWithin(-2);// [1, 2, 3, 1, 2]
numbers.copyWithin(0, 3);// [4, 5, 3, 4, 5]
numbers.copyWithin(0, 3, 4);// [4, 2, 3, 4, 5]
numbers.copyWithin(-2, -3, -1);// [1, 2, 3, 3, 4]
[].copyWithin.call({length: 5, 3: 1}, 0, 3);// {0: 1, 3: 1, length: 5}

const array1 = ['a', 'b', 'c', 'd', 'e'];
let array2 = array1.copyWithin(0, 3, 4);
array2.push(2)
console.log(array1.copyWithin(1, 3)); //[ 'd', 'd', 'e', 2, 'e', 2 ]
console.log(Array.isArray(array2)); //true
console.log(array1); //[ 'd', 'd', 'e', 2, 'e', 2 ]
  • fill 填充数组
    arr.fill(value[, start[, end]])
const array1 = [1, 2, 3, 4];
console.log(array1.fill(0, 2, 4));//[1, 2, 0, 0]
console.log(array1.fill(5, 1));//[1, 5, 5, 5]
console.log(array1.fill(6)); //[ 6, 6, 6, 6 ]
console.log(array1)//[ 6, 6, 6, 6 ]

不改变原数组或其他

  • Array.from(obj, mapFn, thisArg); IE11不支持
    obj 可以是 String,Set,Map,arguments等类数组,克隆一个新数组
  • Array.of(element0[, element1[, ...[, elementN]]]) IE11不支持
    方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型。
Array.of(7);       // [7] 
Array.of(1, 2, 3); // [1, 2, 3]

Array(7);          // [ , , , , , , ]
Array(1, 2, 3);    // [1, 2, 3]
  • entries(),keys(),values() 数组遍历 IE11支持
  1. entries 遍历key value, 一个新的 Array 迭代器对象。Array Iterator是对象,它的原型(proto:Array Iterator)上有一个next方法,可用用于遍历迭代器取得原数组的[key,value]
    image.png

    done: 遍历到数组最后一个时才为true
  2. keys 遍历索引,其他同entries
  3. values 遍历value,其他同entries
  • every(), some(), includes 可兼容IE9,返回布尔值, includes不支持IE
    arr.includes(valueToFind[, fromIndex]),includes还可以包含指引数
function isBigEnough(element, index, array) {
  return element >= 10;
}
[12, 5, 8, 130, 44].every(isBigEnough);   // false
[12, 54, 18, 130, 44].every(isBigEnough); // true
  • filter, find, findIndex IE11
    filter 返回复合条件的数组
    find 返回复合条件的第一个值,无则undefined
    findIndex 返回复合条件的第一个索引,无则undefined
  • flat(number| Infinity) 拍平数组 IE11, Edge不支持
var arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
console.log(arr4.flat(Infinity));// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
console.log(arr4)//[1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
  • flatMap 深度为1的flat 与 map 相结合

var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) {
// return element for new_array
}[, thisArg])

var arr1 = [1, 2, 3, 4];
arr1.map(x => [x * 2]); // [[2], [4], [6], [8]]
arr1.flatMap(x => [x * 2]);// [2, 4, 6, 8]
arr1.flatMap(x => [[x * 2]]);// [[2], [4], [6], [8]]
  • reduce, reduceRight 支持到IE9
    接受四个参数
    Accumulator (acc) (累计器)
    Current Value (cur) (当前值)
    Current Index (idx) (当前索引)
    Source Array (src) (源数组)
    函数累计处理的结果
[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array {
  return accumulator + currentValue;
}); //10

其他

  • forEach, map
    两者里面没有break , 可以用return 语句等同于continue语句
    forEach 是es5的语法,无返回值。forEach() 被调用时,不会改变原数组,也就是调用它的数组(尽管 callback 函数在被调用时可能会改变原数组)。
let arr1 = [12, 34, 4, 3, 4, 4];
let arr2 = arr1.forEach(va => {
    if (va === 4) {
        return false;
    }
    console.log(va)
    return va * 2;
});
console.log(arr1, arr2);
/**
12
34
3
[ 12, 34, 4, 3, 4, 4 ] undefined
 */

map, es6中的语法,有返回值,不敢变原数组,相当于深拷贝

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