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
JS中几种常见的数组算法(前端面试必看)的更多相关文章
- JS中几种常见的高阶函数
高阶函数:英文叫Higher-order function.JavaScript的函数其实都指向某个变量.既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数 ...
- js中几种常见的方法的实例 shift,unshift,push,prop
1.shift()定义和用法 shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值. 语法:arrayObject.shift() 返回值:数组原来的第一个元素的值. 说明:如果 ...
- js中几种常用的数组处理方法的总结
一.filter()用法 功能:用于筛选数组中满足条件的元素,返回一个筛选后的新数组. <script> $(function(){ var arr = [1,-2,3,4,-5]; va ...
- 自然语言处理的CNN模型中几种常见的池化方法
自然语言处理的CNN模型中几种常见的池化方法 本文是在[1]的基础上进行的二次归纳. 0x00 池化(pooling)的作用 首先,回顾一下NLP中基本的CNN模型的卷积和池化的大致原理[2].f ...
- java几种常见的排序算法总结
/*************几种常见的排序算法总结***************************/ package paixu; public class PaiXu { final int ...
- 七种常见经典排序算法总结(C++实现)
排序算法是非常常见也非常基础的算法,以至于大部分情况下它们都被集成到了语言的辅助库中.排序算法虽然已经可以很方便的使用,但是理解排序算法可以帮助我们找到解题的方向. 1. 冒泡排序 (Bubble S ...
- 【JS中循环嵌套常见的六大经典例题+六大图形题,你知道哪几个?】
首先,了解一下循环嵌套的特点:外层循环转一次,内层循环转一圈. 在上一篇随笔中详细介绍了JS中的分支结构和循环结构,我们来简单的回顾一下For循环结构: 1.for循环有三个表达式,分别为: ①定义循 ...
- js中如何访问对象和数组
js中如何访问对象和数组 一.总结 一句话总结:js访问对象点和中括号,访问数组的话就是中括号 对象 . [] 数组 [] 1.js访问对象的两种方式? . [] 可以使用下面两种方式访问对象的属性和 ...
- java讲讲几种常见的排序算法(二)
java讲讲几种常见的排序算法(二) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 堆排序 思路:构建一个小顶堆,小顶堆就是棵二叉树,他的左右孩子均大于他的根节点( ...
随机推荐
- 将notepad++打造成java快速开发IDE
参考文章:http://blog.csdn.net/mdyyzc/article/details/7653096 有时候要试验一小段代码,打开eclipse又需要忍受漫长的煎熬(电脑配置较低,见谅). ...
- Java 容器在实际项目开发中应用
前言:在java开发中我们离不开集合数组等,在java中有个专有名词:"容器" ,下面会结合Thinking in Java的知识和实际开发中业务场景讲述一下容器在Web项目中的用 ...
- HTML5头部标签中<meta>常用信息
整理一些平时常用的,方便查阅 <!-- 字体编码 --> <meta charset="utf-8" /> <!-- 关键字 --> <m ...
- 使用travis-ci自动部署github上的项目
travis-ci是什么? 一个使用yaml格式配置用于持续集成完成自动化测试部署的开源项目 官网:https://travis-ci.org/ 使用travis-ci集成vue.js项目 首先,您需 ...
- json-server mock数据
前言: 项目开发中,影响项目进程的常常是由于在前后端数据交互的开发流程中停滞,前端完成静态页面的开发后,后端迟迟未给到接口.而现在,我们就可以通过根据后端接口字段,建立一个REST风格的API接口,进 ...
- html5 01 随记
一 HTML 是一种制作网站的标记语言 二.HTML基本语法 HTML 标签 html标签是html中的最基本单位 也是最重要的部分 通常使用尖角号 开始"<"和结束&qu ...
- UVA - 1639 -Candy
题目链接:https://vjudge.net/problem/UVA-1639 题目大意: 有两个糖果盒,每个盒子里面有n个糖果,每天随机选一个(概率分别为p,1-p),然后吃一颗糖.直到有一天,打 ...
- SQL Server事务遭遇网络异常时的处理机制浅析
SQL Server数据库中,如果应用程序正在执行一个事务的时候突然遭遇了网络异常,例如网络掉包,网络中断等,那么这个事务会怎么样? SQL Server数据库是通过什么机制来判断处理呢? 估计很多人 ...
- 【Django】中间件
Middleware 这个地方把所有Request 拦截住,用我们自己的方式完成处理以后直接返回 Response.因此了解中间件的构成是非常必要的. Initializer: __init__(se ...
- 使用Node.js搭建静态资源服务器
对于Node.js新手,搭建一个静态资源服务器是个不错的锻炼,从最简单的返回文件或错误开始,渐进增强,还可以逐步加深对http的理解.那就开始吧,让我们的双手沾满网络请求! Note: 当然在项目中如 ...