JavaScript实现在数组中查找不同顺序排列的字符串


Posted in Javascript onSeptember 26, 2014

需求描述:从一组数组中找出一组按不同顺序排列的字符串的数组元素。假如有这样一个数组:

[ 'abcd', 'hello', 'bdca', 'olleh', 'cadb', 'nba', 'abn', 'abc' ]

需要找出的结果是:

[ 'abcd', 'bdca', 'cadb' ]

那么这里的关键点是判断一组字符串是否是否只是字符的顺序不同,只要解决整个关键点其他都好办了。

方法1:

var stringClassify = function( arr ){

    var arrLength = arr.length,

        obj = {},

        i = 0,

        num, item, name, firstItem, strLength;

 

    for( ; i < arrLength; i++ ){

        item = arr[i];

        strLength = item.length;

        num = 0;

 

        // 将单个的字符转换成 Unicode 编码

        // 对编码进行取和计算

        for( j = 0; j < strLength; j++ ){

            num += item.charCodeAt( j );

        }      

 

        if( !firstItem ){

            firstItem = item;

            obj[ num ].push( item );

        }

                // 通过检测待添加的字符串的第一个字符是否

                // 在另一个字符串中出现以避免将下面的情况

                // [ 'ad', 'da', 'bc' ]

        else if( ~firstItem.indexOf(item.charAt(0)) ){

            obj[ num ].push( item );

        }

    }

 

    for( name in obj ){

        console.log( obj[name] );

    }

};

方法1采用了遍历字符串中的每一个字符,然后将单个的字符转换成 Unicode 编码,对编码进行取和的计算,abcd 和 bdca 的编码和会是一致的。最后用编码和作为对象的 key 来保存编码和一致的字符串。

方法 1 需要注意的是,字符串“ad”和“bc”的 Unicode 编码和是一样的,此时需要多加一个判断,检测任意一个字符串中的第一个字符是否有出现在另一个字符串中出现过即可。

方法2:

var stringClassify = function(){

    var arrLength = arr.length,

        obj = {},

        i = 0,

        num, item, name, strArr, newStr;

 

    for( ; i < arrLength; i++ ){

        item = arr[i];

 

        strArr = arr[i].split( '' );

        strArr.sort();

        newStr = strArr.join( '' );

 

        if( !obj[newStr] ){

            obj[ newStr ] = [];

        }

 

        obj[ newStr ].push( item );

    }

 

    for( name in obj ){

        console.log( obj[name] );

    }

};

方法2是将字符串转换成数组后再对数组进行 sort 排序,abcd 和 bdca 使用 sort 排序后会变成 abcd,将拍好序的字符串作为对象的 key 来保存排序一致的字符串。

其实两种方法的原理都是通过将字符转换成 Unicode 编码,只是方法1是显式的转换,而方法2中用到的 sort 排序,会隐式的转换。

Javascript 相关文章推荐
给jQuery方法添加回调函数一款插件的应用
Jan 21 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
Apr 27 Javascript
聊一聊JavaScript作用域和作用域链
May 03 Javascript
js获取ip和地区
Mar 10 Javascript
jquery 禁止鼠标右键并监听右键事件
Apr 27 jQuery
JavaScript实现获取用户单击body中所有A标签内容的方法
Jun 05 Javascript
angular实现图片懒加载实例代码
Jun 08 Javascript
详解JavaScript 中 if / if...else...替换方式
Jul 15 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
Aug 09 Javascript
微信小程序实现二维码签到考勤系统
Jan 16 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
Sep 27 Javascript
JavaScript 定时器详情
Nov 11 Javascript
前端轻量级MVC框架CanJS详解
Sep 26 #Javascript
alert出数组中的随即值代码
Sep 25 #Javascript
jquery得到iframe src属性值的方法
Sep 25 #Javascript
jquery获得同源iframe内body下标签的值的方法
Sep 25 #Javascript
jquery 实现两Select 标签项互调示例代码
Sep 25 #Javascript
$(&quot;&quot;).click与onclick的区别示例介绍
Sep 25 #Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
Sep 25 #Javascript
You might like
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
收藏Javascript中常用的55个经典技巧
2007/08/12 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
jQuery图片滚动图片的效果(另类实现)
2013/06/02 Javascript
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
jQuery中ajax的load()与post()方法实例详解
2016/01/05 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
表单中单选框添加选项和移除选项
2016/07/04 Javascript
Bootstrap栅格系统简单实现代码
2017/03/06 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
详解ES6系列之私有变量的实现
2018/11/21 Javascript
如何能分清npm cnpm npx nvm
2019/01/17 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
JavaScript页面倒计时功能完整示例
2019/05/15 Javascript
vue使用Sass时报错问题的解决方法
2020/10/14 Javascript
vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作
2020/10/30 Javascript
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
Python发送form-data请求及拼接form-data内容的方法
2016/03/05 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
python安装scipy的步骤解析
2019/09/28 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
详解css3 mask遮罩实现一些特效
2018/10/24 HTML / CSS
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
HTML5 window/iframe跨域传递消息 API介绍
2013/08/26 HTML / CSS
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
应届毕业生应聘自荐信
2013/12/07 职场文书
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
欠款证明
2015/06/24 职场文书
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers