zoukankan      html  css  js  c++  java
  • JS中几种常见的数组算法(前端面试必看)

    JS中几种常见的数组算法

    1.将稀疏数组变成不稀疏数组

    /**
    * 稀疏数组 变为 不稀疏数组
    * @params array  arr 稀疏数组
    * @return array  不稀疏的数组
    */
    function noSparse(arr) {
    	var resArr = [];   //创建空数组
    	for (var i = 0; i < arr.length; i ++) {
    		if (arr[i] !== undefined) {
    			resArr.push(arr[i])
    		}
    	}
    	return resArr;
    }
    
    var arr_demo1 = [1,2,,,,,3,4,,'a',['A','B','C'],,'M'];
    console.log( arr_demo1.noSparse( arr_demo1 ) );
    

    2.判断一个元素在不在元素里面

    /**
     * 判断一个元素在不在一个数组里面
     * @params array arr 数组
     * @params fixed  其他参数
     * @params int type 1是===  其他值表示只要 ==
     * @return 
     */
    function inArray(arr, ele ,type ){
    
    	for( var i = 0; i < arr.length ; i++ ){
    		if( type === 1 ){
    			if( arr[i] === ele ){
    				return true;
    			}
    
    		} else {
    			if( arr[i] == ele ){
    				return true;
    			}
    		}
    	}
    
    	return false;
    }
    
    
    
    // 验证
    var arr1 = [1,3,11,5,7,9];
    // console.log( inArray( arr1, 11) );
    // console.log( inArray( arr1 , "11", 1) );
    // console.log( inArray( arr1 , 11, 1) );
    

    3.数组去重

    方法一(用到上面 inArray函数)
    /**
    * 数组去重
     * @params array arr 需要操作的数组
     * @return array resArr 返回去重后的新数组
     */
    
     function noRepeat( arr ){
     	var resArr = [];
     
     	for( var j = 0; j < arr.length; j++ ){
     		if( !inArray( resArr, arr[j],1 ) ){
     			resArr.push( arr[j] );
     		}
     	}
     	return resArr;
    
     }
    
     var arr2 = [1,1,3,2,2,4,4,1,5];
     console.log( noRepeat( arr2 ) );
    
    方法二
    /**removeRepeat() 消除数组中的重复元素
     * @param arr 传入的数组作为参数
     */
    
    function removeRepeat( arr ){
    
    	// 先用一层for循环来遍历第一个比较数
    	for( var i = 0; i < arr.length ; i++ ){
    
    		// 再用一层for循环来遍历第二个比较数
    		for( j = i+1; j < arr.length ; j++ ){
    			if( arr[i] == arr[j] ){
    				arr.splice( j,1 );
    				j--;  //当删除重复项之后  后面的数组元素会顶上来  所以设置 j-- 保证每一项都被循环遍历
    			}
    		}
    	}
    
    	return arr;
    }
    
    // 验证
    var arr_demo1 = [1,3,1,1,2,3,2,4,5,5,4,4,4,4,6];
    removeRepeat( arr_demo1 );
    console.log( arr_demo1 );
    

    4.遍历二维数组

    	/**遍历二维数组 twoDimension()
     * @param arr数组参数
     */
    function twoDimension( arr ){
    	// 第一层for循环遍历第一维度数组
    	for( var i = 0; i < arr.length ; i++ ){
    
    		// 第二层for循环遍历第二维度数组
    		for( var j = 0; j < arr[i].length ; j++ ){
    			document.write(arr[i][j]+"被遍历了!" +"<br>");
    		}
    	}
    }
    
    // 验证
    var arr_demo3 = [ ["a","b","c","d"] , ["e","f","g"] , ["h","i"],["j","k"] ];
    twoDimension( arr_demo3 );
    

    5.取得二维数组中数组元素长度最长的数组

    /**取得二维数组中数组元素长度最长的元素maxLength()
     * @param arr数组参数
     */
    function maxLength( arr ){
    	var i = 0;
    	for( var j = 1 ; j < arr.length ; j++ ){
    		if( arr[i].length < arr[j].length ){
    			i = j;
    		}
    	}
    	return i;
    }
    
    // 验证
    var arr_demo4 = [ ["a","b","c","d"] , ["e","f","g",1,2,3,4,5,6] , ["h","i"],["j","k"] ];
    console.log( maxLength( arr_demo4 ) );
    console.log( arr_demo4[ maxLength(arr_demo4) ].length );
    

    6.取得数组中数值最大的元素

    /**max()取得数组中值最大的元素
     * @param arr 传入任意数组
     */
     function max( arr ){
     	var  i = 0 ;
    
     	// 用for循环遍历 比较
     	for( var j = 1 ; j < arr.length ; j++ ){
     		if( arr[j] > arr[i] ){
     			i = j;
     		}
     	}
    
     	return arr[i];
    
     }
    
    
     // 验证
     var  arr_demo2 = [10,8,50,28,51,5];
     max( arr_demo2 );
     console.log( max( arr_demo2 ) );  //51
  • 相关阅读:
    电商数据分析模型
    电商系统中的商品模型的分析与设计
    java枚举使用详解
    运用四色建模法进行领域分析
    UML,Powerdesigner 使用方法
    powerdsigner Association Multiplicity
    UML的类图、时序图表示方法以及惯例
    面向对象分析与设计—四色原型模式(彩色建模、领域无关模型)(概念版)
    知识读书笔记
    知识型读书笔记
  • 原文地址:https://www.cnblogs.com/yi-0921/p/7404522.html
Copyright © 2011-2022 走看看