ES6 内置对象扩展

251 阅读4分钟

Array 的扩展方法

扩展运算符(展开语法)

扩展运算符可以将数组或者对象转为用逗号分割的参数序列

例子:将数组拆分成以逗号分割的参数

let arr = [1, 2, 3, 4]
    console.log(...arr)
    //等价于 console.log(1,2,3,4)

注意:可以看到这里输出了1 2 3 4 而不是数组,这里就是将arr 以逗号分割的方式传给了 console.log()

例子:以逗号隔开传给函数

let arr = [1, 2, 3, 4]
function echo(str1, str2, str3, str4){
    console.log(str1) //1
    console.log(str2) //2
    console.log(str3) //3
    console.log(str4) //4
}
echo(...arr)

例子:利用加 [] 合并数组

let arr1 = [1, 2, 3, 4]
let arr2 = ['a', 'b', 'c', 'b']
let arr3 = [...arr1,...arr2]
//我们可以通过再加一个 [] 让他变成新数组
console.log(arr3) //[1, 2, 3, 4, "a", "b", "c", "b"]	

例子:利用 Array.push() 合并数组

let arr1 = [1, 2, 3, 4]
let arr2 = ['a', 'b', 'c', 'b']
//其实 push 也是可以接收多个参数的
//这里等价于 arr1.push('a', 'b', 'c', 'b')
arr1.push(...arr2)
console.log(arr1)

例子:利用扩展运算符可以将伪数组转换为真正的数组

<div>11</div>
<div>21</div>
<div>31</div>
<div>41</div>
<div>51</div>
<div>61</div>
<div>71</div>
<div>81</div>
<div>91</div>
<div>101</div>
<div>111</div>
<div>121</div>
<div>131</div>
<div>141</div>
<div>151</div>
<div>161</div>
<div>171</div>
<div>181</div>
<div>191</div>
<div>201</div>

let ele = document.getElementsByTagName('div')
console.log(ele)
console.log(ele instanceof Array)
//利用展开运算之转换为真的数组
ele = [...ele]
console.log(ele)
console.log(ele instanceof Array)

构造函数方法

语法:

Array.from()

将类数组或可变量的对象转换为真正的数组

例子:

<div>11</div>
<div>21</div>
<div>31</div>
<div>41</div>
<div>51</div>
<div>61</div>
<div>71</div>
<div>81</div>
<div>91</div>
<div>101</div>
<div>111</div>
<div>121</div>
<div>131</div>
<div>141</div>
<div>151</div>
<div>161</div>
<div>171</div>
<div>181</div>
<div>191</div>
<div>201</div>

//对象
let obj = {
    '0':'a',
    '1':'b',
    '2':'c',
    '3':'d',
    length:3
}
//伪数组
let ele = document.getElementsByTagName('div')
console.log(obj instanceof Array)
console.log(ele instanceof Array)

let new_obj = Array.from(obj)
let new_ele = Array.from(ele)
console.log(new_obj instanceof Array)
console.log(new_ele instanceof Array)
console.log(new_obj)
console.log(new_ele)

Array.from() 还有第二个参数与map() 方法相似,用来对每个元素进行处理,将处理后的值放入返回的数组。

例子:

//对象
let obj = {
    '0':'a',
    '1':'b',
    '2':'c',
    '3':'d',
    length:4
}
let new_arr = Array.from(obj, item => item + '新增字符串')
console.log(new_arr) //["a新增字符串", "b新增字符串", "c新增字符串", "d新增字符串"]

find() 方法

用于找出第一个符合条件的数组成员,如果没有找到返回 undefined。

例子:找到 id 为 2 的元素

let arr = [
    {
        id: 1,
        name: '张三'
    },
    {
        id: 2,
        name: '李四'
    }
]
let target = arr.find( item => item.id == 2)
console.log(target) //{id: 2, name: "李四"}

findIndex() 方法

用于找出第一个符合条件的数组成员的位置,如果没有就返回 1 。

例子:找出大于 6 的元素的位置

const arr = [1, 5, 7, 12]
const res_index = arr.findIndex((value, index) => {
    return value > 6
})
console.log(res_index) //2

includes() 方法

表示某个数组是包含给定的值,返回布尔值

语法:

includes(你要找的值)

例子:

const arr = [1, 5, 7, 12]
console.log(arr.includes(5)) //true
console.log(arr.includes(7)) //true
console.log(arr.includes(2)) //false

注意:在 ES6 之前我吗一般用 indexOf 但是书写比较晦涩,这里 includes 可以替代 indexOf 使用

String 的扩展方法

  • startsWith() //表示参数字符串是否在原字符串的开头,返回布尔值。
  • endsWith() //便是参数字符串是否在原字符串的结尾,返回布尔值。

例子:

let str = 'Javascript hi!'
console.log(str.startsWith('Java')) //true
console.log(str.startsWith('java')) //false
console.log(str.endsWith('!')) //true

注意:是区分大小写的

repeat() 方法

repeat() 表示将原字符串重复 n 次,返回一个新字符串。

例子:

let str = 'Javascript hi!'
let new_str = str.repeat(3)
console.log(new_str) //Javascript hi!Javascript hi!Javascript hi!

set 数据结构

ES6 提供了新的数据结构 Set 。它类似于数组,但是成员的值都是唯一的,没有重复的值。

应用场景:例如存储用户输入过的历史关键字,因为用户可能多次输入,所以在用户重复输入时,会自动比对,如果有重复的值将不再储存。

如果创建 Set 数据结构

Set 本身是一个构造函数,我们可以生产一个 set 数据结构。

语法:

const s = new Set()

Set 可以接受一个数组作为参数,用来初始化。

const set = new Set([1, 2, 3, 4,])

利用 Set 数据结构可以实现数据去重

例子:

const arr = [1 ,1 ,1 ,2 ,2 ,3 ,3 ,4 ,4]
const new_set = new Set(arr)
//注意这里拿到的是 set 数据结构
console.log(new_set) //Set(4) {1, 2, 3, 4}
//利用扩展运算符将 set 数据结构变成以逗号分隔的零散量,再给一个[]变为属于组
const new_arr = [...new_set]
console.log(new_arr) //(4) [1, 2, 3, 4]

Set 的常用方法

  • add() //添加某个值返回 Set 本身结构
  • delete() //删除某个值,返回一个布尔值,便是删除是否成功
  • has() //返回一个布尔值,表示该值是否为 Set 成员。
  • clear() //清除所有成员,没有返回值。

例子:

const arr = [1, 2, 3, 4]
const arr_set = new Set(arr)
arr_set.add(5).add(6) //添加了 5 和 6
arr_set.delete(1) //删除了 1
console.log(arr_set.has(3)); //true
console.log(arr_set); //Set(5) {2, 3, 4, 5, 6}
arr_set.clear() //清除所有值
console.log(arr_set) //Set(0) {}

注意:这里的 add() 方法时可以使用链式调用的。

Set 的值也是可以使用 forEach 遍历的

例子:

const arr = [1, 2, 333, 444, 555]
const arr_set = new Set(arr)
arr_set.forEach((item) => {
    console.log(item)
})