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
posted @ 2017-08-21 15:09  A_码侠  阅读(853)  评论(0编辑  收藏  举报