JS-数组

先来简单谈谈克隆吧:

克隆:

便利对象 for(var prop in obj)
1.判断是不是原始值 typeof()
2.引用值判断是数组还是对象 //tostring instanceof construtor
3.建立相对应的数组或对象

<script type="text/javascript">
        var obj={
            name:"zhangsan",
            age:12,
            card:['haha','master'],
            wife:{
                name="xiaohong",
                son:{
                    name:'baby'
                }
            }
        }
</script>   

        var obj1={  //拷贝过程
            name:obj.name,
            age:12,
            card:[obj.card[0],obj.card[1]],  //不是原始值,先创建一个新空数组 后将信息拷贝进去
            wife:{
                name="xiaohong",
                son:{
                    name:'baby'
                }
            }
        }

数组:

var arr=[1,2];
var arr=new Array(1,2,3);

var arr=new Array(10);  //一个参数 10代表数组的长度
var arr=[10];   //数组包含一个值 10

可以改变原数组的一类
push(); 在数组的最后一位添加数据,可以同时添加
pop(); 把数组的最后一位剪切出去,在执行过程中会将传入的参数忽略
shift(); 在数组的前面减
unshift(); 在数组的前面增加
splice(); 向/从数组中添加/删除项目,然后返回被删除的项目。


sort();数组排序按ASCⅡ码排序的

//1.必须写两个形参
//2.看返回值 1)当返回值为负数时,那么前面的数放在前面
//          2)为正数,那么后面的数在前面,调换位置
//          3)为0,不动
//会执行无数次 符合冒泡排序算法

var arr=[10,2,3,4,10,8];
//写法1.
arr.sore(function(a,b){   
  if(a>b){    //升序排序(a>b)  //降序排序(a<b)
    return 1;
  }else{
    return -1;
  }
});

//写法2.(1)
arr.sore(function(a,b){   
  if(a-b>0){    //升序排序(a>b)  //降序排序(a<b)
    return a-b;
  }else{(a-b<0)
    return a-b;
  }
});
//写法2.(2)
//当然我们可以简单写
arr.sore(function(a,b){   
  return (a-b); //升序
  return (b-a); //降序
});
//给一个有序的数组乱序:
var arr=[1,2,3,4,5,6,7,8,9];
        //Math.random(); //返回0~1的随机数  (0,1)
         arr.sort(function(){
            return Math.random()-0.5;  //返回任意概率的正数或负数
        });

这里写图片描述

//一个排序的实例子
var arr=['aa','ssss','ooooo','s','tttttt','fff'];
         arr.sort(function(a,b){
            return a.length-b.length; //按字节长度排序
        });

这里写图片描述


不改变原数组:
concat();
toStrong();
slice(); (从该位开始截取,截取到该位) 不写就是整个截取
join(); (字符串拼接,将每一项用该字符串拼接起来) 不传是按逗号链接的
split();


类数组:

var obj={  //这是一个类数组,也是一个对象
            "2":"a",
            "3":"b",
            "length":2,
            "push":Array.prototype.push
        }

        obj.push('c');
        obj.push('d');

        //类数组:属性要为索引(数字)属性,必须有length属性,最好加上push
        Array.prototype.push=function(target){  //push(); 的原理
            obj[obj.length]=target;
            obj.length++;
        }

这里写图片描述
给类数组加上splice 属性,它的表现形式(也就是长相啦)将和数组一样:我们来看一下吧给上面的类数组加上splice:Array.prototype.splice,显示结果为:
这里写图片描述
总结一下啦:

  • 1.可以利用属性名模拟数组的特性
  • 2.可以动态的增长 length 属性
  • 3.如果强制让类数组调用 push 方法,则会根据 length 属性值的位置进行属性的扩充

【题1】
封装type

封装type 实现:
typeof([]) --array
typeof({}) --object
typeof(function) --object
typeof(new Number()) --number Object //包装类
typeof(123) --number

// 1.分两类 原始值 引用值
// 2.区分引用值 (数组 对象 包装类)

这里写图片描述
【题2】
在原型链上的数组去重,再把去重后的数组输出:
(思路:数组的每一位放在对象里,作为属性名,判断对象下的属性名是否有值。if 判断当没有值操作,给属性值一个任意的值(这里我们给的是一个字符串”abc”))

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值