2016-01-06 学习笔记

本文介绍了JavaScript中数组的多种操作方法,包括去除重复项、顺序扰乱、判断类型、求交集、并集及差集等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaScript数组去除重复
来源:慕课

一、数组去重

方法1:

    //利用数组的indexOf方法function unique (arr) {
      var result = []; 
      for (var i = 0; i < arr.length; i++)
      {
        if (result.indexOf(arr[i]) == -1) result.push(arr[i]);
      }
      return result;
    }


方法2//利用hash表,可能会出现字符串和数字一样的话出错,如var a = [1, 2, 3, 4, '3', 5],会返回[1, 2, 3, 4, 5]
    function unique (arr){
        var hash = {},result = []; 
        for(var i = 0; i < arr.length; i++)
        {
            if (!hash[arr[i]]) 
            {
                hash[arr[i]] = true; 
                result.push(arr[i]); 
            }
        }
        return result;
    }


方法3//排序后比较相邻,如果一样则放弃,否则加入到result。会出现与方法2一样的问题,如果数组中存在1,1,'1'这样的情况,则会排错
    function unique (arr) {
        arr.sort();
        var result=[arr[0]];
        for(var i = 1; i < arr.length; i++){
            if( arr[i] !== arr[i-1]) {
                result.push(arr[i]);
            }
        }
        return result;
    }


方法4//最简单但是效率最低的算法,也不会出现方法2和方法3出现的bug
    function unique (arr) {
        if(arr.length == 0) return;
        var result = [arr[0]], isRepeate;
        for( var i = 0, j = arr.length; i < j; i++ ){
            isRepeate = false;
            for( var k = 0, h = result.length; k < h; k++){
                if(result[k] === arr[i]){
                    isRepeate = true;
                    break;
                }
                if(k == h) break;
            }
            if( !isRepeate ) result.push(arr[i]);
        }
        return result;
    }


方法5//此方法充分利用了递归和indexOf方法,感谢网友@真爱像深蓝
    var unique = function (arr, newArr) {
         var num;

         if (-1 == arr.indexOf(num = arr.shift())) newArr.push(num);

         arr.length && unique(arr, newArr);
    }


二、数组顺序扰乱

方法1//每次随机抽一个数并移动到新数组中
    function shuffle(array) {
        var copy = [],
            n = array.length,
            i;
        // 如果还剩有元素则继续。。。
        while (n) {
            // 随机抽取一个元素
            i = Math.floor(Math.random() * array.length);
            // 如果这个元素之前没有被选中过。。
            if (i in array) {
                copy.push(array[i]);
                delete array[i];
                n--;
            }
        }


方法2//跟方法1类似,只不过通过splice来去掉原数组已选项
    function shuffle(array) {
        var copy = [],
            n = array.length,
            i;
        // 如果还剩有元素。。
        while (n) {
            // 随机选取一个元素
            i = Math.floor(Math.random() * n--);
            // 移动到新数组中
            copy.push(array.splice(i, 1)[0]);
        }
        return copy;
    }


方法3//前面随机抽数依次跟末尾的数交换,后面依次前移,即:第一次前n个数随机抽一个跟第n个交换,第二次前n-1个数跟第n-1个交换,依次类推。
    function shuffle(array) {
        var m = array.length,
            t, i;
        // 如果还剩有元素…
        while (m) {
            // 随机选取一个元素…
            i = Math.floor(Math.random() * m--);
            // 与当前元素进行交换
            t = array[m];
            array[m] = array[i];
            array[i] = t;
        }
        return array;
    }


三、数组判断

方法11 //自带的isArray方法
    2 var array6 = [];
    3 Array.isArray(array6 );//true


方法21 //利用instanceof运算符
    2 var array5 = [];
    3 array5 instanceof Array;//true


方法31 //利用toString的返回值
    2 function isArray(o) {
    3 return Object.prototype.toString.call(o) === ‘[object Array]‘;4 }


四、数组求交集

方法11 //利用filter和数组自带的indexOf方法
    2 array1.filter(function(n) {
    3 return array2.indexOf(n) != -14 });


五、数组求并集

方法1//方法原理:连接两个数组并去重
    function arrayUnique(array) {
        var a = array.concat();
        for(var i=0; i<a.length; ++i) {
            for(var j=i+1; j<a.length; ++j) {
                if(a[i] === a[j])
                    a.splice(j--, 1);

     - 列表项

            }
        }

        return a;
    };


六、数组求差集

方法11 //利用filter和indexOf方法
    2 Array.prototype.diff = function(a) {
    3 return this.filter(function(i) {return a.indexOf(i) < 0;});4 };

暂时汇总了这点儿,有待后续补充。欢迎大家补充。
资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 四路20秒声光显示计分抢答器Multisim14仿真源文件+设计文档资料摘要 数字抢答器由主体电路与扩展电路组成。优先编码电路、锁存器、译码电路将参赛队的输入信号在显示器上输出;用控制电路和主持人开关启动报警电路,以上两部分组成主体电路。通过定时电路和译码电路将秒脉冲产生的信号在显示器上输出实现计时功能,构成扩展电路。经过布线、焊接、调试等工作后数字抢答器成形。关键字:开关阵列电路;触发锁存电路;解锁电路;编码电路;显示电路 一、设计目的 本设计是利用已学过的数电知识,设计的4人抢答器。(1)重温自己已学过的数电知识;(2)掌握数字集成电路的设计方法和原理;(3)通过完成该设计任务掌握实际问题的逻辑分析,学会对实际问题进行逻辑状态分配、化简;(4)掌握数字电路各部分电路与总体电路的设计、调试、模拟仿真方法。 二、整体设计 (一)设计任务与要求: 抢答器同时供4名选手或4个代表队比赛,分别用4个按钮S0 ~ S3表示。 设置一个系统清除和抢答控制开关S,该开关由主持人控制。 抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。 参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。 如果定时时间已到,无人抢答,本次抢答无效。 (二)设计原理与参考电路 抢答器的组成框图如下图所示。它主要由开关阵列电路、触发锁存电路、解锁电路、编码电路和显示电路等几部分组成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值