最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Javascript 数据结构学习笔记 (一)数组

    正文概述 掘金(YoloKayl33)   2020-12-28   440

    JavaScipt 数据结构 (Ⅰ)数组

    定义数组

    • 在js中定义数组较为简单:var name = [];

    简单的斐波那契数列

    • 代码:
    var fibonacci = []
    fibonacci[1] = 1;
    fibonacci[2] = 2;
    //Access elements and iterate arrays
    for (let i = 3; i < 10; i++){
        fibonacci[i] = fibonacci[i-1] + fibonacci[i-2];
    }
    for (let i = 1;i < fibonacci.length;i++){
        console.log(fibonacci[i]);
    }
    
    • 可以看到:想要访问数组里特定的元素,可以用中括号传递数值位置。

    数组的增删方法

    增加元素

    • push() 用于在数组尾部添加元素
    • unshift() 用于在数组头部添加元素
    • splice(x,0,y1,y2,y3) 用于在x开始往后添加y1,y2,y3

    删除元素

    • pop() 用于删除数组尾部的元素
    • shift() 用于删除数组头部的元素
    • splice(x,y) 用于删除从x开始往后的y个元素

    二维及多维数组

    代码:

     //以三维数组为例
    var matrix3x3x3 = [];
    for (var i=0;i<3;i++){
        matrix3x3x3[i] = [];
        for (var j=0;j<3;j++){
            matrix3x3x3[i][j] = [];
            for (var z=0;z<3;z++){
                matrix3x3x3[i][j][z]= i+j+z;
            }
        }
    }
    

    解释:

    • 1.由于js本身只支持一维数组,并不支持矩阵,但是js数组并不是强类型,所以可以在数组内嵌套数组,以此来达到形成多维数组的目的。
    • 2.由代码段中的循环我们可以知道,想要构造多维数组,只需要计算清楚对应的循环嵌套位置即可;

    一些数组方法(核心)

    • concat() 将两个或以上数组拼接起来,并返回结果

    • every() 对数组内的每个元素执行给定函数,如果所有元素的执行函数结果都为true,那么every()返回true.

    • filter() 对数组内的每个元素执行给定函数,返回一个包括所有执行结果为真的元素的数组.

    • forEach() 对数组内的每个元素执行给定函数,no returns.

    • map() 对数组内的每个元素执行给定函数,返回一个包括所有函数调用结果的数组

    • some() 对数组内的每个元素执行给定函数,只要有一项元素返回true,那么some()便返回true。

    • join() 将所有数组元素拼接成字符串。

    • indexOf() 返回第一个和给定参数相等的元素的索引,没有则返回-1

    • lastIndexOf() 返回最大的和给定参数相等的元素的索引

    • reverse() 颠倒当前数组顺序

    • slice() 传入索引值,将对应索引范围内的元素返回成一个新的数组

    • toString() 将数组作为字符串返回

    • valueOf() 和toString()类似

    ES6 新数组方法

    箭头函数

    • 可以用箭头函数来简化原来的一些简单函数:
    numbers.forEach(x=>{
        console.log((x%2==0));
    })
    //这两段代码功能是完全一样的
    numbers.forEach(function (x){
        console.log(x%2==0);
    })
    

    for...of

    for (let n of numbers) {
        console.log((n%2 == 0)? 'even' :'odd');
    }
    //可以不再使用 
    for (let i = 0;i <= numbers.length; i++) {
    	console.log((n%2 == 0)? 'even' :'odd');
    }
    

    新的迭代器 @@iterator

    • ES6增加了一个@@iterator属性,需要通过Symbol.iterator来访问
    let iterator = numbers[Symbol.iterator]();
    for (let n of numbers){
        console.log(iterator.next().value);
    }
    
    
    • 不断调用next方法就能依次得到数组中的值

    entries() keys() values()方法

    • entries方法返回包含键值对的@@iterator:
    let aEntries = numbers.entries();
    for (let n of numbers){
        console.log(aEntries.next().value);
        //show[position,value] like [0,1]
    }
    
    • keys方法返回包含数组引索的@@iterator:
    let aKeys = numbers.keys();
    for (let n of numbers){
        console.log(aKeys.next());
        //shows [position,done] like [value:0,done:false]
        //if done==false its tell us it still in iterate.
    }
    
    • values方法返回包含数组值的@@iterator:
    let aValues =numbers.values();
    for (let n of numbers){
        console.log(aValues.next());
        //shows [value,done] like [value:0,done:false]
        //if done==false its tell us it still in iterate.
    }
    

    from() Array.of() 方法

    • from()可以从旧数组中创建一个新的数组
    • from()可以通过对旧数组添加方法或者filter来创建新数组
    • Array.of()根据传入参数创建一个新数组
    • Array.of()同样可以复制数组
    let numbers2 =Array.from(numbers);
    //和旧数组一样
    let evens = Array.from(numbers,x=>(x%2==0));
    //一个新的偶数数组
    let numbers3 = Array.of(1,2,3,4);
    //it equals let numbers3 = [1,2,3,4];
    let numbersCopy = Array.of(...numbers3);
    //it also can copy an old array.
    

    fill() copyWithin()方法

    • fill()用静态值填充数组
    • copyWithin()复制数组中部分元素到指定索引位置
    • 请看代码示例:
    let numbersCopy = Array.of(1,2,3,4,5,6);
    numbersCopy.fill(0);//becomes([0,0,0,0,0,0])
    numbersCopy.fill(2,1);//becomes([0,2,2,2,2,2])
    numbersCopy.fill(1,3,5);//becomes([0,2,2,1,1,2])
    //很方便我们去初始化数组:
    let ones = Array(6).fill(1);//becomes([1,1,1,1,1,1])
    let copyArray = [1,2,3,4,5,6];
    copyArray.copyWithin(0,3);//becomes ([4,5,6,4,5,6])
    copyArray = [1,2,3,4,5,6];
    copyArray.copyWithin(1,3,5);//becomes([1,4,5,4,5,6])
    

    搜索

    • find()返回第一个返回true的元素的值
    • findIndex()返回第一个返回true的元素的索引
    let numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
    function mul(elem,index,array) {
        return (elem % 13 == 0 );
    }
    console.log(numbers.find(mul));//13
    console.log(numbers.findIndex(mul));//12
    
    • includes()如果数组里存在某个元素,返回true
    console.log(numbers.includes(15));//true
    console.log(numbers.includes(20));//false
    

    类型数组

    • 由于在JavaScript中数组并不是强类型,所以可以在数组中放任何数据类型,而类型数组则用于储存单一数据类型。
    • 类型数组在使用上和普通数组并无太大区别,但在使用诸如WebGLAPI、位操作、处理文件、图像的时候,它便可以展现它的威力。
    let length = 5;
    let int16 =new Int16Array(length);
    
    let array16 = [];
    array16.length = length;
    for (let i=0; i<length;i++){
        int16[i]=i+1;
    }
    console.log(int16);
    

    Javascript 数据结构学习笔记 (一)数组

    小结

    • 不管是什么语言,数组都算是其中比较重要的一个基础数据结构;在JavaScript中,通过一些方法,对数组的一些操作比较简单,这也使得用js来实现堆栈等基础数据结构奠定了基础。
    • 数据结构学习笔记(二)和(三)将会使用js的数组来理解堆栈结构。

    写在结尾

    • 本学习笔记供爱好者学习参考使用,如需转载请联系作者知晓
    • 作者:YoloKayl33
    • wechat:secretLWXKY

    起源地下载网 » Javascript 数据结构学习笔记 (一)数组

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元