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获取网页中图片高度的两种方法
Sep 26 Javascript
防止按钮在短时间内被多次点击的方法
Mar 10 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
Mar 25 Javascript
js操作IE浏览器弹出浏览文件夹可以返回目录路径
Jul 14 Javascript
jQuery实现滚动切换的tab选项卡效果代码
Aug 26 Javascript
JavaScript实现网页加载进度条代码超简单
Sep 21 Javascript
jQuery延迟执行的实现方法
Dec 21 Javascript
JS匹配日期和时间的正则表达式示例
May 12 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
Aug 04 Javascript
vue+element实现表单校验功能
May 20 Javascript
el-table树形表格表单验证(列表生成序号)
May 31 Javascript
基于javascript处理nginx请求过程详解
Jul 07 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的Socket网络编程入门指引
2015/08/11 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
THINKPHP3.2使用soap连接webservice的解决方法
2017/12/13 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
Javascript读取cookie函数代码
2010/10/16 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
JavaScript实现时间表动态效果
2017/07/15 Javascript
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
[49:40]2018DOTA2亚洲邀请赛小组赛 A组加赛 TNC vs Newbee
2018/04/03 DOTA
[02:58]魔廷新尊——痛苦女王至宝语音台词节选
2020/06/14 DOTA
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
Python实现重建二叉树的三种方法详解
2018/06/23 Python
Python如何实现转换URL详解
2019/07/02 Python
详解python 中in 的 用法
2019/12/12 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
用python实现学生管理系统
2020/07/24 Python
python实现批处理文件
2020/07/28 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
酒店应聘自荐信
2013/11/09 职场文书
护理毕业生自我鉴定
2014/02/11 职场文书
食品安全承诺书范文
2014/08/29 职场文书
社团招新宣传语
2015/07/13 职场文书
关于法制教育的宣传语
2015/07/13 职场文书
2016十一国庆节慰问信
2015/12/01 职场文书
创业计划书之废品回收
2019/09/26 职场文书
AI:如何训练机器学习的模型
2021/04/16 Python
Spring Boot 排除某个类加载注入IOC的操作
2021/08/02 Java/Android