数组扩展

数组扩展

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

原文地址:https://www.cnblogs.com/daixixi/p/11057245.html

时间: 2024-11-03 16:04:48

数组扩展的相关文章

ES6数组扩展

前面的话 数组是一种基础的JS对象,随着时间推进,JS中的其他部分一直在演进,而直到ES5标准才为数组对象引入一些新方法来简化使用.ES6标准继续改进数组,添加了很多新功能.本文将详细介绍ES6数组扩展 创建数组 在ES6以前,创建数组的方式主要有两种,一种是调用Array构造函数,另一种是用数组字面量语法,这两种方法均需列举数组中的元素,功能非常受限.如果想将一个类数组对象(具有数值型索引和length属性的对象)转换为数组,可选的方法也十分有限,经常需要编写额外的代码.为了进一步简化JS数组

Python numpy数组扩展效率问题

Numpy库的ndarray数组可以方便地进行各种多维数据处理工作 可是它最大的缺点就是不可动态扩展--"NumPy的数组没有这种动态改变大小的功能,numpy.append()函数每次都会重新分配整个数组,并把原来的数组复制到新数组中."(引用自http://blog.chinaunix.net/uid-23100982-id-3164530.html) 场景: 今天用ndarray处理 42000 条数据时,就遇到了数组扩展的效率问题 文件名:train.csv(后附下载) 文件大

javascript中的数组扩展(一)

 javascript中的数组扩展(一) 随着学习的深入,发现需要学习的关于数组的内容也越来越多,后面将会慢慢归纳,有的是对前面的强化,有些则是关于前面的补充. 一.数组的本质    数组是按照次序排列的一组值,本质上,数组是一种特殊的对象            console.log(typeof[1,2,3]);//object    数组是对象但是对象不是数组            var arr = ['a','b','c','d','e'];            console.lo

js 判断数组包含某值的方法 和 javascript数组扩展indexOf()方法

var  questionId = []; var anSwerIdValue = []; ////javascript数组扩展indexOf()方法 Array.prototype.indexOf = function (e) { for (var i = 0, j; j = this[i]; i++) { if (j.indexOf(e) != -1) { return i; } } return -1; } if (anSwerIdValue.length < 14) { alert(&quo

javascript 数组扩展实现 php array_count_values() 函数功能

在PHP中,array_count_values() 这个函数可以统计数组元素出现的次数,这个函数会返回一个数组,键名是原数组的值,键值是这个值出现的次数. 但是JavaScript中没有这样的函数.不过大神无数,前些日子发现这样的一个扩展: /** javascript 数组扩展实现 php array_count_values() 函数功能 */ (function(window){ if ( window.ActiveXObject ) { window.Array.prototype.i

ES6入门教程---数值扩展数组扩展和对象扩展

1.数值扩展 var num = 0b11; console.log(num);3 var num = 0o11;console.log(num);9 var num = 1.234; console.log(Math.trunc(num))//干掉小数点console.log(Math.sign(-0));//判断参数是正数.负数.正0还是负0 console.log(Math.hypot(3,4))//返回所有参数的平方和的平方根(勾股定理) 2.数组扩展 var str = 'xunian

ES6 之数值扩展和数组扩展

单纯记录,方便快速复习. // 数值扩展: console.log( //有穷.整数.非数字判断 Number.isFinite(10), Number.isInteger(12), Number.isInteger(12.1), Number.isNaN(NaN), Number.isNaN(10) ) console.log( //判断正数.负数.0 Math.sign(2), Math.sign(0), Math.sign(-1), Math.sign('2'), // 1 Math.si

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

数组扩展 1.includes()方法,参数为要检测的值.includes方法有点像indexOf(),indexOf未检测到则返回-1,否则返回下标.includes则是返回true或false.includes可以检测NaN.第二个参数表示从什么位置检测. 2.flat和flatMap.flat负责把数组拉平,意思是一个二维数组调用flat方法会变成一维数组.参数传的是数组的维度.例如传2则表示将3维拉成1维.如果数组中有空位则跳过.flatMap有点像flat方法和Map方法的结合.先对每

Es6 学习笔记(一)数组扩展

扩展运算符 ... 1.数组的扩展运算符将一个数组转换成一个逗号分隔的参数序列 console.log(...[1,2,3])   //1,2,3 ['a', 'b',...[1,3]]   //a,b,1,3 2.扩展运算用于函数调用 function push(a, arr){ a.push(...arr); } **************************************************************************************** f