数组扩展

Posted daixixi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组扩展相关的知识,希望对你有一定的参考价值。

数组扩展

function *g () 
    console.log(1)
    yield 'one'
    console.log(2)
    yield 'two'


const gg = g()
gg.next()

setTimeout(function()
    gg.next()
,1000)

在第一次使用gg.next()时运行,知道第二个gg.next()出现在运行第二段

let set = new Set([1,2,5,3,4]) // 返回一个数组
console.log(set) 
let arr = [...set] // 展开为数组

Set 里的元素不可以重复,所以可以用它来去重!!!

Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。

const set1 = new Set([1, 2, 3, 4, 5]);

console.log(set1.has(1));
// expected output: true

console.log(set1.has(5));
// expected output: true

console.log(set1.has(6));
// expected output: false
new Set([iterable]);

参数
iterable
如果传递一个可迭代对象,它的所有元素将不重复地被添加到新的 Set中。如果不指定此参数或其值为null,则新的 Set为空。
返回值
一个新的Set对象。

习题

扩展运算符,可以将一个数组转为用逗号分隔的参数序列。由此我们来完成,随机产生十个整数,放入数组中,对这个数组进行降序排序,并将这个数组的最大值和最小值。

效果如下图所示(效果图中的整数是随机产生的):

技术图片

任务提示

第一步:创建一个空数组,用来接收后面的十个整数

第二步:在0~100之间的随机整数中,获取十个整数,放入创建的数组中

Tips:利用循环,获取10个整数

第三步:对数组进行降序排序

第四步:按照效果图所示,使用扩展运算符结合Math.min()与Math.max()获取到这个数组的最大值和最小值

注:扩展运算符,可以将一个数组转为用逗号分隔的参数序列

function getRandomInt(max) 
            return Math.floor(Math.random()* Math.floor(max));
        
        let numberArr = []
        for(let i=0;i<=9;i++) 
            numberArr.push(getRandomInt(100))
        
        // console.log(numberArr)

        function newSort(...arr) 
            let temArr = []
            let temMax = 0
            let argument = [...arguments[0]]
            console.log(argument)
            let length = argument.length
            for(let i=0;i<length;i++) 
                for(let j=0;j<length-i-1;j++) 
                   temMax = Math.max(argument[j],argument[j+1])
                
                temArr.push(temMax)
            
            console.log(temArr)
            numberArr.length = 0
            numberArr = [...temArr]
        
        console.log(numberArr)
        newSort(numberArr)
        console.log(numberArr)

新的方法

Array.from(obj)

ArrayLike对象或者Iterable对象转换为一个Array

const obj = 
    0: 1,
    1: 'kangkang',
    2: false,
    length:2

// 属性名必须是数字或者字符形式的数字
console.log(Array.from(obj))

//(2)?[1, "kangkang"]0: 11: "kangkang"length: 2__proto__: Array(0)
设置的长度是2,所以第三个属性没有显示出来!

console.log(Array.from(obj,item => item*2))

//接受第二个参数对对象里每个值进行运算!

Array.of()

将传入的参数合并为数组

let arr = Array.of("1",2,"adf",false)
// (4)?["1", 2, "adf", false]

fill()

填充数组

let arr = new Array(10).fill(0)
// [0,0,0.....]
console.log([1,2,3].fill(0)) // 会覆盖掉原先的数据
let arr = new Array(10).fill(0,0,5)// 指定开始位置和结束位置(不包括5)

Array.includes()

找到返回true

let arr = [1,2,3,234,32,42]
console.log(arr.includes(234))/true

keys

let arr = [1,23,34]
let keys = arr.keys()
for (let i of keys) 
    console.log(i)
 // 0    1   2

values

let arr = [1,23,34]
let values = arr.values()
for (let i of values) 
    console.log(i)
 // 1  23  34

entries

let arr = [1,23,34]
let entries = arr.entries()
for (let i of entries) 
    console.log(i)
 
// [0, 1]
// [1, 23]
// [2, 34]

for (let [j,v] of arr.entries()) 
    console.log(j,v)
 
// 0 1
// 1 23
// 2 34

注意解构赋值的快速取值和序列方法!!

find

参数是接收一个函数作为参数

按顺序遍历数组,当回调返回true时,就返回当前遍历到的值!

const res = [1,2,3,23,34,45].find((value,index,arr)=> 
    return value % 3 ===0
)
console.log(res) // 3

findIndex

参数是接收一个函数作为参数

按顺序遍历数组,当回调返回true时,就返回当前遍历到的值的下标!

const res = [1,2,3,23,34,45].findIndex((value,index,arr)=> 
    return value % 3 ===0
)
console.log(res) // 2

arr.indexOf(NaN) 无法判断 ,但是

const res = [1,2,3,23,34,45,NaN].findIndex((value,index,arr)=> Number.isNaN(value))
console.log(res) // 6

以上是关于数组扩展的主要内容,如果未能解决你的问题,请参考以下文章

ES6浅谈--数组扩展对象扩展

使用 map 时使用扩展运算符扩展数组

ES6随笔--各数据类型的扩展--数组和对象

动态扩展数组的长度

js_数组扩展

动态扩展数组长度(自定义)