数组与类数组

数组

- 数组的定义
字面量;
var arr = new Array(length/content)

- 数组的读与写
不可以溢出读,会返回undefined
但可以溢出写,中间是empty,(这样操作后应该是类数组了!——个人看法!需要求证!)
在这里插入图片描述
在这里插入图片描述
ECMAScript DOM BOM 是js 三部分!
不同浏览器在DOM 和 BOM上有区别!尤其是BOM!操作浏览器的BOM!
es3.0 es5.0 es6.0

  • 数组常用的几种方法!
    - 改变原数组
    7种方法:push,pop,unshift,shift,splice,reverse,sort
  • 不改变原数组
    - concat,join<->split(str),toString,slice

- push:在数组最后一位添加


在这里插入图片描述
返回数组的长度!
push方法的重写:

var arr = [1,2,3];
        Array.prototype.push = function(){
            for(var i = 0 ;i < arguments.length;i++){
                this[this.length] = arguments[i];
            }
            return this.length;
        }

- pop:剪切数组最后一位,传参没有卵用


在这里插入图片描述
返回的值还是数组长度!
pop方法重写:

var arr = [1, 2, 3];
        Array.prototype.pop = function() {
            var popValue = this[this.length - 1];
            this.length--;
            return popValue;
        };

- shift unshift:在数组开头 减和加1位


在这里插入图片描述
unshift添加需要参数!shift删除不需要参数!
unshift方法重写:

var arr = [1, 2, 3];
        Array.prototype.unshift = function() {
            var len = arguments.length,
                arg = [];
            for (var j = 0; j < len; j++) {
                arg[j] = arguments[j];
            }
            for (var i = 0; i < this.length; i++) {
                arg[arg.len + i] = arg.push(this[i]);
            }
            return arg;
        };

这种方法不好!要返回长度的话,arr没有发生改变!


- reverse:逆序排列


方法重写:

var arr = [1, 2, 3];
        Array.prototype.reverse = function() {
            var len = this.length,
                revArr = [];
            for (var i = 0; i < len; i++) {
                revArr[i] = this[len - i - 1];
            }
            arr = revArr;
            return arr;
        };

在这里插入图片描述


- splice:切片(从第几位开始,截取的长度,在切口处添加新的数据)


在这里插入图片描述
在某一个位置添加,可用于重写unshift
在这里插入图片描述
参数为负的起始位
在这里插入图片描述


- sort:按asc码升序排序


在这里插入图片描述
所以系统给我们留下一个接口,让我们自己编写排序规则
在这里插入图片描述

var arr = [1, 2, 6, 5, 20, 11];
        //必须有两个参数
        //看返回值,若返回值为负,那么前面的数放到前面
        //         若返回值为正,那么后面的数放到前面
        arr.sort(function(a, b) {
            return a - b;
            // return b-a;降序
        });

给一个有序的数组乱序(哈哈!)

var arr = [1, 2, 5, 6, 11, 20];
        //必须有两个参数
        //看返回值,若返回值为负,那么前面的数放到前面
        //         若返回值为正,那么后面的数放到前面
        arr.sort(function(a, b) {
            return Math.random() - 0.5;
            // return b-a;降序
        });

每次刷新都不同!
在这里插入图片描述
按对象的某个值排序对象

扫描二维码关注公众号,回复: 10457981 查看本文章
var obj = {
            age: 185
        };
        obj1 = {
            age: 195
        };
        obj2 = {
            age: 20
        };
        arr = [obj, obj1, obj2];
        //必须有两个参数
        //看返回值,若返回值为负,那么前面的数放到前面
        //         若返回值为正,那么后面的数放到前面
        arr.sort(function(a, b) {
            return a.age - b.age;
            // return b-a;降序
        });

按字节排序:

function retBytes(str) {
            var num = str.length;
            for (var i = 0; i < str.length; i++) {
                if (str.charCodeAt(i) > 255) {
                    num++;
                }
            }
        }
        var arr = ["sfjslj", "a", "b", "c", "wangjia"];
        arr.sort(function(a, b) {
            return retBytes(a) - retBytes(b);
        });

在这里插入图片描述


- concat:连接两个数组(不能改变原数组)


在这里插入图片描述


-slice:(从第几位开始截取,截取到该位)


在这里插入图片描述
注意他与splice的区别!


-toString():这就不用说了吧!


类数组(可以当数组用的非数组)

arguments就是个类数组
属性要为索引(数字)属性,必须要有length,最好加push,

在这里插入图片描述
再加上splice方法后变为数组
在这里插入图片描述
阿里原题:

        var obj = {
            "2": "a",
            "3": "b",
            length: 2,
            push: Array.prototype.push
                // splice: Array.prototype.splice
        };
        obj.push("c");
        obj.push("d");

在这里插入图片描述

var obj = {
            "0": "s",
            "1": "ss",
            "2": "a",
            "3": "b",
            length: 4,
            name: wangjia,
            age: 23,
            push: Array.prototype.push,
            splice: Array.prototype.splice
        };

在这里插入图片描述

发布了37 篇原创文章 · 获赞 0 · 访问量 696

猜你喜欢

转载自blog.csdn.net/weixin_43704007/article/details/105038461
今日推荐