js Array 数组相关的方法

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/article/details/51274550

判断数组中是否有相同的元素

第一种方法

     function isRepeat(arrs) {
        if(arrs.length > 0) {
            var sArrs = arrs.sort();
            for(var i = 0,ilen = sArrs .length; i < ilen; i+=1) {
                if(sArrs [i] == sArrs [i+1]) {
                    return true;
                }
            }
        }
        return false;
     }
    var arrs = [1,2,3];
    console.log(isRepeat(arrs)); // false
    arrs.push(2)//4
    console.log(isRepeat(arrs)); // true

第二种方法

    /*
     * 逻辑思路:定义一个对象 遍历数组,判断该对象的键有没有,有的话返回true,否则返回false
     */
    function isRepeat(arrs) {
        var has = {};
        if(arrs.length > 0) {
            for(var i = 0, len = arrs.length; i < len ; i=i+1) {
                if(has[arrs[i]]){//利用数组元素值作为对象下标
                    return true;
                }
                has[arrs[i]] = true;
            }
        }
        return false;
    }
    var arrs = ['a','b','c','d'];
    isRepeat(arrs)//false
    arrs.push('a')//5
    isRepeat(arrs)//true

计算一个数组中每个元素在数组中出现的次数

    function arrayElemCount(arrs) {
        var newArrs = [];
         if(arrs.length > 0) {
            for(var i = 0,ilen = arrs.length; i < ilen; i+=1) {
                var temp = arrs[i];
                var count = 0;
                for(var j = 0,jlen = arrs.length; j < jlen; j+=1) {
                    if(arrs[j] == temp) {
                        count++;
                        arrs[j] = -1;//判断再赋值
                     }
                }
                newArrs.push(temp + ":" +count);
            }
         }
         return newArrs;
    }
    var arrs = [1,2,1,2,3,4,5,6,7,1,2,3];
    console.log(arrayElemCount(arrs)); 
    // 打印如下:["1:3", "2:3", "-1:6", "-1:6", "3:2", "4:1", "5:1", "6:1", "7:1", "-1:12", "-1:12", "-1:12"]
    // 键值为-1的,都可以去掉

第二种类似方法

    function arrayElemCount(arrs) {
        if(arrs.length > 0){
            for(var i = 0, len = arrs.length; i < len ; i=i+1) {
                var count = 0;
                var a = arrs[i];
                for(var j = 0;j < len;j++){
                    if(arrs[j] == a ){
                        count++;
                    }
                }
                var as = true;
                for(var k = 0;k < i;k++ ){
                    if(arrs[k]==arrs[i]){
                      as = false;
                    }
                }
                if(as){
                    console.log(arrs[i]+':'+count)
                }
            }
        }
    }
    var arrs = [1,2,1,2,3,4,5,6,7,1,2,3];
    arrayElemCount(arrs);//做一个条件赋值判断,为false不打印出来

删除数组重复元素的操作

使用indexOf方法

    /* 重复项 indexOf方法在IE8及IE8以下不支持,因此有必要封装一个
     * @return {newArrays} 返回新数组
     */
    function arrayUnique(arrs) {
        var newArrays = [];
        for(var i = 0,ilen = arrs.length; i < ilen; i++) {
            if(newArrays.indexOf) {
                if(newArrays.indexOf(arrs[i]) == -1) {
                    newArrays.push(arrs[i]);
                }
            }else {
                if(indexOf(arrs[i],newArrays) == -1) {
                    newArrays.push(arrs[i]);
                }
            }

        }
        return newArrays;
    }
    /*
     * 为了支持IE8及以下浏览器需要封装一个indexOf方法
     * @param {arr,arrs} 某一项 原数组
     * @return 返回数组某一项
     */
     function indexOf(arr,arrs){
        if(arrs.length > 0) {
            for(var i = 0,ilen = arrs.length; i < ilen; i+=1) {
                if(arrs[i] == arr) {
                    return i;
                }
            }
        }
        return -1;
     }
    var arrs = [1,2,3,1,2,3];
    console.log(arrayUnique(arrs)); // [1,2,3]

    //数组下标判断法
    function arrayUnique(arrs) {
        var newArrays = [];
        if(arrs.length > 0) {
            for(var i = 0,ilen = arrs.length; i < ilen; i+=1) {
                if(arrs.indexOf) {
                    if(arrs.indexOf(arrs[i]) == i) {
                        newArrays.push(arrs[i]);
                    }
                }else {
                    if(indexOf(arrs[i],arrs) == i) {
                        newArrays.push(arrs[i]);
                    }
                }

            }
        }
        return newArrays;
    }

    //数组排序对比法、循环对比新数组
        function arrayUnique(arrs) {
        var newArrays = [];
        if(arrs.length > 0) {
            arrs.sort();
            for(var i = 0,ilen = arrs.length; i < ilen; i+=1) {
                //此处是跟newArrays的数组对比
                if(arrs[i] !== newArrays[newArrays.length - 1]) {
                    newArrays.push(arrs[i]);
                }
            }
        }
        return newArrays;
    }
    //对象键值对法
    function arrayUnique(arrs) {
        var newArrays = [];
        var hash = {};
        if(arrs.length > 0) {
            for(var i = 0,ilen = arrs.length; i < ilen; i+=1) {
                if(!hash[arrs[i]]) {
                    hash[arrs[i]] = 1;
                    newArrays.push(arrs[i]);
                }
            }
        }
        console.log('hash'+hash);
        return newArrays;

    }

求出2个数组的相同元素及不同元素,函数返回值可以是对象

    function getArrsSameAndDiffElem(arrs1,arrs2){
        var hash = {},
            sameElemArrs = [],
            diffElemArrs = [];
        if(arrs1.length > 0) {
            for(var i = 0,ilen = arrs1.length; i < ilen;i+=1) {
                hash[arrs1[i]] = 1;
            }
        }
        if(arrs2.length > 0) {
            for(var j = 0,jlen = arrs2.length; j < jlen; j+=1) {
                if(hash[arrs2[j]]) {
                // 说明有相同的元素,把相同的元素存入sameElemArrs数组里面去
                    sameElemArrs.push(arrs2[j]);
                }else {
                // 说明是不同的元素,把不同的元素存入diffElemArrs数组里面去
                    diffElemArrs.push(arrs2[j]);
                }
            }
        }
        return {
            sameElemArrs: sameElemArrs,
            diffElemArrs: diffElemArrs
        }
    }
     var arrs1 = ["aac","aab","cfg",'longen','tugenhua','single'];
     var arrs2 = ["aac","mnc","nba","cba","anta",'tugenhua','single'];
     console.log(getArrsSameAndDiffElem(arrs1,arrs2));

Array.prototype.slice.call(arguments); 即可将类数组转换为数组||[].slice.call(arguments)

JS二维数组排序组合

var arr = [["wu", "xia"], ["kong", "tao"], ["yun", "ou"]];
//不确定长度数组,使用递归
function doExchange(doublearrays) {

    var len = doublearrays.length;
    if(len >= 2) {
        var arr1 = doublearrays[0],
            arr2 = doublearrays[1];

        var len1 = arr1.length, 
            len2 = arr2.length;

        var index = 0;
        var totalLen = len1 * len2;
        var newArray = new Array(totalLen);

        for(var i=0; i<len1; i++) {
            for(var j=0; j<len2; j++) {
                newArray[index] = arr1[i] + arr2[j];
                index ++ ;
            }
        }

        var tempArr = [];
        tempArr[0] = newArray;
        for(var k=2; k<len; k++) {
            tempArr[k-1] = doublearrays[k];
        }

        return doExchange(tempArr);

    }else {
        return doublearrays[0];
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术小讲堂

WCF中数据契约之已知类型的几种公开方式代码中定义配置中定义宿主端使用解析器

WCF中传输的数据不想传统的面向对象编程,它只传递了一些对象的属性,但是自身并不知道自己属于什么对象,所以,他没有子类和父类的概念,因而也就没有Is-a的关系,...

2803
来自专栏desperate633

深入浅出Java的类加载机制使用自己的类别载入器

Java只有当需要使用类的时候,才会将类载入。java类的载入,是通过类加载器进行的。

1152
来自专栏技术之路

Caliburn.Micro学习笔记(五)----协同IResult

今天说一下协同IResult 看一下IResult接口 /// <summary> /// Allows custom code to execute...

2068
来自专栏安恒网络空间安全讲武堂

seacms修复历程总结

seacms修复历程总结 从6.45版本开始search.php就存在前台getshell的漏洞,到6.54官方对其进行修补,但修复方法是对用户输入的参数进行过...

6027
来自专栏嵌入式程序猿

ARM cortexM4异常处理(2)

上次课程我们简单讲解了异常的一些基础知识,希望对大家有所帮助,今天我们来看看异常在向量表中的位置,异常的入口和返回。 中断向量表 有人会问,不是讲异常吗,怎么...

3637
来自专栏DT乱“码”

MongoDB Java

MongoDB Java 环境配置 在 Java 程序中如果要使用 MongoDB,你需要确保已经安装了 Java 环境及 MongoDB JDBC 驱动。 本...

2317
来自专栏移动端开发

Android学习--还有一些小技巧

      通过上面的这些文章,就把简单的安卓项目总结了一遍,当然你说懂这些就可以做Android开发的话还是不行的,欠缺的还有很多,但欠缺的这些我们有只能在工...

983
来自专栏大数据架构

Java进阶(四)线程间通信剖析

Java多线程编程中经常会碰到这样一种场景——某个线程需要等待一个或多个线程操作结束(或达到某种状态)才开始执行。比如开发一个并发测试工具时,主线程需要等到所有...

44016
来自专栏开发与安全

散列表(三):冲突处理的方法之开地址法(线性探测再散列的实现)

二、开地址法 基本思想:当关键码key的哈希地址H0 = hash(key)出现冲突时,以H0为基础,产生另一个哈希地址H1 ,如果H1仍然冲突,再以H0 为基...

2480
来自专栏分布式系统进阶

KafkaController分析3-ControllerChannelManager

使用NetworkClient连接到broker node, 使用selector处理网络IO;

781

扫码关注云+社区

领取腾讯云代金券