ES6中数组的新方法

数组的扩展

1.1扩展运算符

1.1.1:...

扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。

    <body>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </body>
    <script type="text/javascript">
        console.log(...[1,2,3]);    //1 2 3
        console.log(1,...[2,3,4],5);//1 2 3 4 5
        console.log([...document.querySelectorAll(‘div‘)]);//[div, div, div, div]选择页面中所有div
    </script>

该运算符主要用于函数调用。

        function add(x, y) {
          return x + y;
        }

        var numbers = [4, 38];
        console.log(add(...numbers)) // 42

上面代码中,add(...numbers),是函数的调用,它使用了扩展运算符。该运算符将一个数组,变为参数序列。

1.1.2:代替数组apply方法

由于扩展运算符可以展开数组,所以不再需要apply方法,将数组转为函数的参数了。

        function f(x, y, z) {
          console.log(x);
          console.log(y);
          console.log(z);
        }
        let args = [0, 1, 2];
        f(...args);    //0  1 2
// ES6 的写法
Math.max(...[14, 3, 77])

// 等同于
Math.max(14, 3, 77);

上面代码中,由于 JavaScript 不提供求数组最大元素的函数,所以只能套用Math.max函数,将数组转为一个参数序列,然后求最大值。有了扩展运算符以后,就可以直接用Math.max了。

  合并数组

        var arr1 = [1,2];
        var arr2 = [3];
        var arr3 = [4,5];
        console.log([...arr1,...arr2,...arr3]);//[1,2,3,4,5]

  与解构赋值结合

const [first, ...rest] = [1, 2, 3, 4, 5];
first // 1
rest  // [2, 3, 4, 5]

const [first, ...rest] = [];
first // undefined
rest  // []

  字符串

扩展运算符还可以将字符串转为真正的数组。

[...‘hello‘]
// [ "h", "e", "l", "l", "o" ]

1.2Array.from()

Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)。

var arrayLike = {
    ‘0‘: ‘a‘,
    ‘1‘: ‘b‘,
    ‘2‘: ‘c‘,
    length: 3
};

var arr2 = Array.from(arrayLike); // [‘a‘, ‘b‘, ‘c‘]

1.3Array.of()

Array.of方法用于将一组值,转换为数组。

Array.of(3, 11, 8) // [3,11,8]
Array.of(3) // [3]
Array.of(3).length // 1

这个方法的主要目的,是弥补数组构造函数Array()的不足。因为参数个数的不同,会导致Array()的行为有差异。

Array() // []
Array(3) // [, , ,]
Array(3, 11, 8) // [3, 11, 8]

上面代码中,Array方法没有参数、一个参数、三个参数时,返回结果都不一样。只有当参数个数不少于2个时,Array()才会返回由参数组成的新数组。参数个数只有一个时,实际上是指定数组的长度。

Array.of基本上可以用来替代Array()new Array(),并且不存在由于参数不同而导致的重载。它的行为非常统一。

Array.of() // []
Array.of(undefined) // [undefined]
Array.of(1) // [1]
Array.of(1, 2) // [1, 2]

Array.of总是返回参数值组成的数组。如果没有参数,就返回一个空数组。

1.4copyEithin()

数组实例的copyWithin方法,在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。也就是说,使用这个方法,会修改当前数组。

Array.prototype.copyWithin(target, start = 0, end = this.length)

它接受三个参数。

  target(必需):从该位置开始替换数据。

  start(可选):从该位置开始读取数据,默认为0。如果为负值,表示倒数。

  end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数。

[1, 2, 3, 4, 5].copyWithin(0, 3)
// [4, 5, 3, 4, 5]

上面代码表示将从3号位直到数组结束的成员(4和5),复制到从0号位开始的位置,结果覆盖了原来的1和2。

 

1.5数组find()和findindex()

数组实例的find方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined

[1, 4, -5, 10].find((n) => n < 0)
// -5

上面代码找出数组中第一个小于0的成员。

  find方法的回调函数可以接受三个参数,依次为当前的值、当前的位置和原数组。

数组实例的findIndex方法的用法与find方法非常类似,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1

1.6数组fill()

fill方法使用给定值,填充一个数组。

[‘a‘, ‘b‘, ‘c‘].fill(7)
// [7, 7, 7]

new Array(3).fill(7)
// [7, 7, 7]

  fill方法还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置。

[‘a‘, ‘b‘, ‘c‘].fill(7, 1, 2)
// [‘a‘, 7, ‘c‘]

上面代码表示,fill方法从1号位开始,向原数组填充7,到2号位之前结束。

1.7数组entries()/keys()/values()

ES6 提供三个新的方法——entries()keys()values()——用于遍历数组。它们都返回一个遍历器对象,可以用for...of循环进行遍历,唯一的区别是keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历。

for (let index of [‘a‘, ‘b‘].keys()) {
  console.log(index);
}
// 0
// 1

for (let elem of [‘a‘, ‘b‘].values()) {
  console.log(elem);
}
// ‘a‘
// ‘b‘

for (let [index, elem] of [‘a‘, ‘b‘].entries()) {
  console.log(index, elem);
}
// 0 "a"
// 1 "b"

如果不使用for...of循环,可以手动调用遍历器对象的next方法,进行遍历。

var letter = [‘a‘, ‘b‘, ‘c‘];
var entries = letter.entries();
console.log(entries.next().value); // [0, ‘a‘]
console.log(entries.next().value); // [1, ‘b‘]
console.log(entries.next().value); // [2, ‘c‘]

1.8数组indludes()

Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似。ES2016 引入了该方法。

[1, 2, 3].includes(2)     // true
[1, 2, 3].includes(4)     // false
[1, 2, NaN].includes(NaN) // true

  该方法的第二个参数表示搜索的起始位置,默认为0。如果第二个参数为负数,则表示倒数的位置,如果这时它大于数组长度(比如第二个参数为-4,但数组长度为3),则会重置为从0开始。

[1, 2, 3].includes(3, 3);  // false
[1, 2, 3].includes(3, -1); // true
时间: 2024-10-29 15:12:05

ES6中数组的新方法的相关文章

javaScript中 数组的新方法(reduce)

定义和用法 reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值. reduce() 可以作为一个高阶函数,用于函数的 compose. 注意: reduce() 对于空数组是不会执行回调函数的. 浏览器支持 表格中的数字表示支持该方法的第一个浏览器版本号. 语法 :array.reduce(function(total, currentValue, currentIndex, arr), initialValue) 参数 栗子1: var arr

vue学习(十四) 条件搜索框动态查询表中数据 数组的新方法

//html <div id="app"> <label> 名称搜索关键字: <input type="text" clasa="form-control" v-model="keywords"> </label> <table class="table table-bordeered table-hover table-striped"> <

iOS中数组遍历的方法及比较

数组遍历是编码中很常见的一种需求,我们来扒一拔iOS里面都有什么样的方法来实现,有什么特点. 因为iOS是兼容C语言的,所以C语言里面的最最常见的for循环遍历是没有问题的. 本文中用的数组是获取的系统的语言数组,大约有30多个数据,虽然还不够模拟大批量的数据,但对于方法的验证是没有问题的了. NSArray *langArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"AppleLanguages"]; 第一种方法

iOS5中UIViewController的新方法

iOS5中UIViewController的新方法 前言 在苹果的 WWDC2011 大会视频的<Session 101 - What’s New in Cocoa> 和<Session 102 - Implementing UIViewController Containment> 中介绍了苹果在 iOS5 中给 UIViewController 新增加的 5 方法以及一个属性: // 方法addChildViewController: removeFromParentViewC

ES6中字符串的新增方法梳理

1.String.fromCodePoint(); String,fromCodePoint()方法可以认为是对String.fromCharCode()方法的扩展,这两个方法的共同点在于都是用于Unicode码点返回对应字符,但是差异在于String.fromCharCode()该方法不能识别大于0xFFFF的码点,ES6中提供了String.fromCodePoint()就很好的弥补了String.fromCharCode()的不足.它可以识别码点大于0xFFFF的对应字符. 上面是在chr

javascript中数组常用的方法

在JavaScript中,数组可以使用Array构造函数来创建,或使用[]快速创建,这也是首选的方法.数组是继承自Object的原型,并且他对typeof没有特殊的返回值,他只返回'object'. 运行[] instanceof Array他会返回ture.虽然结果是这样,但也有复杂的类数组对象,如字符串或arguments对象,但arguments对象并非是Array的实例,但他却拥有length属性,而且他的值是可以被索引的,因此他可以像一个数组那样被遍历. 这本文中,我将介绍数组原型的一

javascript中数组的concat()方法 - 数组连接

1 <html> 2 <head> 3 <title>数组的concat()方法</title> 4 5 <script> 6 /* 7 数组的concat()方法: 8 1.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. 9 2.返回一个新的数组.该数组是通过把所有 arrayX 参数添加到 arrayObject 中生成的. 10 如果要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组. 11 */

ES5中数组新增的方法说明

一.前言-索引 ES5中新增的不少东西,了解之对我们写JavaScript会有不少帮助,比如数组这块,我们可能就不需要去有板有眼地for循环了. ES5中新增了写数组方法,如forEach (js v1.6), map (js v1.6) ,filter (js v1.6),some (js v1.6),every (js v1.6),indexOf (js v1.6),lastIndexOf (js v1.6),reduce (js v1.8),reduceRight (js v1.8) 浏览

JS中数组的迭代方法和归并方法

昨天总结的JavaScript中的数组Array方法 数组的迭代方法 ES5中为数组定义了5个迭代方法.每个方法都要接收两个参数:要在每一项上面运行的函数和(可选的)运行该函数的作用域对象---影响this的值. 传入方法中的函数会介绍三个参数:1.数组项的值 2. 该项在数组的中位值 3. 数组对象本身: every()和some()方法  every():对数组中的每一项运行给定函数,如果每一项都返回true,则返回true,否则false:  some():对数组中的每一项运行给定函数,如