Javascript算法练习(四)

将数组分割成等长数组,然后组合成一个二维数组返回

循环 + slice + push
  • 函数名:function chunkArrayInGroups(arr, size);
  • arr: 需要被分割的数组,size:指定等分数组的长;
  • 情况分析:这个方法的实现主要考虑两个方面
    1. 数组长被size整除,即刚好能分成n个等分数组;
    2. 不能整除,即最后一个数组的长度是数组长与size取余数的结果。
function chunkArrayInGroups(arr, size) {if ( !arr || size <= 0 ) return "Invalid Arguments !";var iLen    = arr.length,iDiv    = 0,iMod    = 0,aTmp    = [],oLst    = null;// 在数组长小于传入的size时,直接返回原数组就行if ( iLen <= size ) return arr;iDiv = Math.floor(iLen / size); // 取出相除后的结果向下取整// 取余数,用于判断是否存在需要单独处理的最后一个不够size长的数组iMod = iLen % size;                 // 不能被size整除,表示最后一个数组里包含< size个元素,需要单独处理if ( iMod !== 0 ) {oLst = arr.slice( (-1) * iMod);}for (var i = 0; i < iDiv; i++) {aTmp.push( arr.slice( i * size, i * size + size  ) );}if ( oLst ) aTmp.push(oLst);return aTmp;
}var f = chunkArrayInGroups;console.log( f([1, 2, 3, 4], 2) );    // [[1,2], [3, 4]]
console.log( f([1, 2, 3, 4, 5], 3) ); // [[1, 2], [3, 4], [5]]
console.log( f([1, 2, 3, 4, 5], 6) ); // [1, 2, 3, 4, 5]
console.log( f([1, 2, 3, 4, 5], -1) ); // Invalid Arguments !

两个字符串中的字符是否包含(即:str1中的所有字符是否都能在str2中找到,忽略顺序和大小写)

  • 简单的实现了下功能
// 判断数组中的两个元素是否相互包含
// 即:将元素字符串格式化之后,忽略大小写和顺序
// 判断一个字符串中的所有字符是否都在另一个字符串中能找到;
// 如:“acdb” 中所有字符都能在 "abcdefg" 中找到;
// 只有全部找到的情况下才会返回:true;
function mutation ( arr ) {if ( !arr || arr.length < 2 ) return "Invalid argument !";// 还可以通过arguments来判断参数的个数// 如果是两个参数,视为传入的是两个字符串// 如果只有一个参数,则当为数组来处理var iArgLen = arguments.length,eFirst      = arr[0].toString().toLowerCase(),eSec        = arr[1].toString().toLowerCase(),sTmp        = "";// 保持被比较的第一个元素总比第二个元素长,避免在查找时才去考虑长度问题// 只是引用的改变(类似指针),实质不会改变数组内容if ( eFirst.length < eSec.length ) {sTmp    = eFirst;eFirst  = eSec;eSec    = sTmp;}for ( var i = 0; i < eSec.length; i++ ) {// 此处尚欠缺重复字符串的判断 // one char not found, return false.if ( eFirst.indexOf(eSec[i]) < 0 ) return false;}return true;
}console.log( mutation(["hello", "HLOOOOEO"]) ); // true
console.log( mutation(["hello", "HLElO"]) );    // true
console.log( mutation(["hello", "HLE"]) );      // false// 还可以用递归来进行扩展,判断数组中最小的那个元素是不是在数组中其他元素中都能找到

从数组中过滤掉指定的元素

  • 原型:function filterEleFromArray(arr[, item1[, item2[, … itemn]]];
// 过滤掉满足回调函数内条件的元素
// 然后返回剩下不符合条件的元素组成的数组
function filterEleFromArray(arr) {var args = arguments,aTmp = [];// arguments并非是数组对象,所以需要将第二个开始的参数保存到数组里for (var i = 1; i < args.length; i++ ) {aTmp.push(args[i]);}return arr.filter(function(value){return aTmp.indexOf(value) < 0;});
}console.log(filterEleFromArray([1, 2, 3, 5, 1, 2, 3], 2, 3));
console.log(filterEleFromArray([1, 2, 3, 1, 2, 3], 2, 3));
console.log(filterEleFromArray([3, 5, 1, 2, 2], 2, 3, 5));
console.log(filterEleFromArray([2, 3, 2, 3], 2, 3));
console.log(filterEleFromArray(["aaa", "bbb", 3, "ddddd"], "aaa", 3));// 执行结果:
algorithm-04.htm:26 [1, 5, 1]
algorithm-04.htm:27 [1, 1]
algorithm-04.htm:28 [1]
algorithm-04.htm:29 []
algorithm-04.htm:30 ["bbb", "ddddd"]

字符串加密处理

  • 这里使用的是最简单的方式,对每个字符串进行转码之后加上或减掉固定的数值,然后再转回字符组成字符串
  • 主要学习:
    • str.charCodeAt(index); 返回字符串中指定索引index的字符的10进制编码
    • String.fromCharCode(a1, a2, …); 将整数参数(可多个参数,非整数会被当做0处理)逐个转成字符之后再组合成字符串返回,此方法为String的静态方法,所以只能用String去调用。
// 加密字符串
function stringEncoding( __str ) {if ( !__str ) return;return __str.toUpperCase().split("").map(function( elem, index ) {// get elem's Unicodevar code = elem.toString().charCodeAt(0);// only deal with "A" - "Z"if ( code >= 65 && code <= 90 ) {// 根据Unicode编码,按照一定规律处理之后,返回// 这里是做了 + 13处理,当结果 > “Z” 之后重新从 “A” 开始计算// return String.fromCharCode( code + 13 > 90 ? code + 13 - 90 + 65 : code + 13);// var iStep = 10;                  // [1]// 还可以将索引利用起来var iStep = index % 2 ? 10 : 13;    // [2]return String.fromCharCode( code + iStep > 90 ? code + iStep - 90 + 65 : code + iStep);} else { // 除字母以外的所有字符原样返回return elem;}}).join(""); // 处理之后重新组合成字符串返回
}console.log("result = " + stringEncoding("Hello!!!!")); // URYYC!!!!    [1]
console.log("result = " + stringEncoding("Hello!!!!")); // UOYVC!!!!    [2]

Javascript算法练习(四)相关推荐

  1. 数据结构和算法(四)之链表结构

    数据结构和算法(四)之链表结构 一. 认识链表 链表和数组一样,可以用来存储一系列的元素,但是链表和数组的实现机制完全不同. 这一章中,我们就来学习一下另外一种非常常见的用于存储数据的线性结构:链表! ...

  2. 04_JavaScript数据结构与算法(四)队列

    JavaScript 数据结构与算法(四)队列 认识队列 队列(Queue)是一种运算受限的线性表,特点:先进先出.(FIFO:First In First Out) 受限之处: 只允许在表的前端(f ...

  3. JavaScript 算法与数据结构 之 正则表达式

    JavaScript 算法与数据结构 之 正则表达式 test()测试方法 使用test()方法返回的是布尔值. 使用测试方法 正则表达式用于匹配指定的字符串. test()方法可以匹配字符串中的内容 ...

  4. 1.1.10 从二分查找BinarySearch开启算法学习之路---《java算法第四版》

    文章目录 0.前言 1.功能 2.示例 有两个名单tinyW.txt和tinyT.txt,将tinyT.txt名单中不在tinyW.txt的数据打印出来 ① 实现原理 ② 实现代码 ③ 性能分析 0. ...

  5. JavaScript算法与数据结构——字典详解

    字典是一种以键-值对的形式存储数据的数据结构,接下来我们将使用JavaScript实现字典数据结构. 1.定义字典类 由于比较字典数据结构比较简单,就直接上代码好了. class Dictionary ...

  6. JavaScript算法相关

    1. 排序 1.1.冒泡排序 每一轮比较,从左至右交换相邻,每轮结束,最后一个为最大 下一轮,需要比较的个数 - 1 j < len - i (范围动态缩小) 共 len - 1 轮比较 fun ...

  7. Javascript函数调用的四种模式

    Javascript一共有四种调用模式:方法调用模式.函数调用模式.构造器调用模式以及apply调用模式.调用模式不同,对应的隐藏参数this值也会不同. 函数作为对象的属性时,称为方法.此时函数(即 ...

  8. JavaScript学习总结(四)——逻辑OR运算符详解

    转载自   JavaScript学习总结(四)--逻辑OR运算符详解 在JavaScript中,逻辑OR运算符用||表示 var bTrue = true;var bFalse = false;var ...

  9. 基于Matlab的跨孔CT胖射线追踪算法(四)

    基于Matlab的跨孔CT胖射线追踪算法(四) CT技术是一种无损的工程物探检测技术,因其方法简单.分辨率高.理论上更可靠.结果更直观,被广泛的应用于各种工程.胖射线追踪是CT技术的一种正演算法,本文 ...

  10. javascript算法汇总(持续更新中)

    1. 线性查找 1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset ...

最新文章

  1. 深度讲解:web前端性能优化
  2. [Head First设计模式]身边的设计模式——适配器模式
  3. ROS编程: 一些Tips
  4. 擅长排列的小明 II
  5. Celery的简单使用
  6. P3243-[HNOI2015]菜肴制作【拓扑排序,优先队列】
  7. java 日期 年数_java 日期加减天数、月数、年数的计算方式
  8. Linux / Windows应用方案不完全对照表
  9. Operations Manager 2007 R2系列之仪表板(多)视图
  10. MySQL数据类型及后面小括号的意义
  11. arpg网页游戏之地图(二)
  12. HTML5学习笔记(二):HTML基础学习之二
  13. cpc卡内计费信息异常包括_抖音信息流广告收费标准,抖音广告效果分析
  14. Vue实现Word文档在线预览功能(内网、外网)!!!
  15. VelocityTracker使用详解
  16. (二)java项目中的文档转换案例实战——PDF转换为JPG图片压缩包
  17. Python numpy函数:shape用法
  18. react-redux多reducer完整实例
  19. 什么是DDL?其含义及其常用命令解析
  20. mysql创建/编辑表时的 ROW_FORMAT = Dynamic 和 Compact 有什么区别

热门文章

  1. 发生致命事故8个月后,优步被获准在匹兹堡恢复自动驾驶测试
  2. 共享打印机无法访问计算机,win7系统文件夹和打印机共享后无法访问的解决方法...
  3. Oracle DB 数据库维护
  4. Win11右键显示更多选项设置教程
  5. 双系统装完只能u盘启动_双系统启动引导修复 双系统启动引导设置教程
  6. 参考 Docker 官方文档 Centos安装 Docker
  7. html5考试总结300字,期中考试总结作文300字合集五篇
  8. rovio环境配置与测试笔记
  9. idea关闭自动更新
  10. 求斐波那契数列的特征方程和通项公式