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 相关文章推荐
JavaScript NaN和Infinity特殊值 [译]
Sep 20 Javascript
JQuery在页面中添加和除移DOM示例代码
Jun 24 Javascript
JQuery.Ajax之错误调试帮助信息介绍
Jul 04 Javascript
jQuery中:first-child选择器用法实例
Dec 31 Javascript
Javascript简写条件语句(推荐)
Jun 12 Javascript
bootstrap实现图片自动轮播
Dec 21 Javascript
angularjs中的$eval方法详解
Apr 24 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
May 01 Javascript
zTree获取当前节点的下一级子节点数实例
Sep 05 Javascript
Angular4编程之表单响应功能示例
Dec 13 Javascript
vue.js路由mode配置之去掉url上默认的#方法
Nov 01 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
Jan 18 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
编译问题
2006/10/09 PHP
MongoDB在PHP中的常用操作小结
2014/02/20 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
2016/01/04 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
Js 随机数产生6位数字
2010/05/13 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
sogou地图API用法实例教程
2014/09/11 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
浅析JS原型继承与类的继承
2016/04/07 Javascript
javascript实现随机生成DIV背景色
2016/06/20 Javascript
jQuery ajaxForm()的应用
2016/10/14 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
Python标准库之Sys模块使用详解
2015/05/23 Python
python将unicode转为str的方法
2017/06/21 Python
Python实现登录接口的示例代码
2017/07/21 Python
python负载均衡的简单实现方法
2018/02/04 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
2018/05/18 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
对python函数签名的方法详解
2019/01/22 Python
Django中的cookie和session
2019/08/27 Python
python实现字符串和数字拼接
2020/03/02 Python
Python实现一个优先级队列的方法
2020/07/31 Python
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
《长城》教学反思
2014/02/14 职场文书
经营理念口号
2014/06/21 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
活着观后感
2015/06/03 职场文书
宝宝满月祝酒词
2015/08/10 职场文书
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL
Go语言 详解net的tcp服务
2022/04/14 Golang
MySql如何将查询的出来的字段进行转换
2022/06/14 MySQL