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 相关文章推荐
ExtJS下grid的一些属性说明
Dec 13 Javascript
ExtJs扩展之GroupPropertyGrid代码
Mar 05 Javascript
jquery 动态创建元素的方式介绍及应用
Apr 21 Javascript
js 单击式的下拉菜单效果实例
Aug 13 Javascript
JavaScript设计模式之装饰者模式介绍
Dec 28 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
Mar 14 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
Aug 05 Javascript
基于jQuery Easyui实现登陆框界面
Jul 10 jQuery
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
Aug 04 Javascript
vue-star评星组件开发实例
Mar 01 Javascript
echarts设置图例颜色和地图底色的方法实例
Aug 01 Javascript
js实现飞机大战小游戏
Aug 26 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+mysql分页代码详解
2008/03/27 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
基于jQuery的仿flash的广告轮播
2010/11/05 Javascript
7款吸引人眼球的jQuery/CSS3特效实例分享
2013/04/25 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
详解浏览器渲染页面过程
2017/02/09 Javascript
JS去除字符串中空格的方法
2017/02/14 Javascript
详解vue的数据binding绑定原理
2017/04/12 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
基于Require.js使用方法(总结)
2017/10/26 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
2018/07/27 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
vue使用代理解决请求跨域问题详解
2019/07/24 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
Python中的Numpy入门教程
2014/04/26 Python
python简易远程控制单线程版
2018/06/20 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
python爬虫实现中英翻译词典
2019/06/25 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
Pycharm创建项目时如何自动添加头部信息
2019/11/14 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
Python基于pillow库实现生成图片水印
2020/09/14 Python
Urban Outfitters英国官网:美国平价服饰品牌
2016/11/25 全球购物
优秀员工推荐信
2014/05/10 职场文书
学习型党组织建设经验材料
2014/05/26 职场文书
党员群众路线剖析材料
2014/10/08 职场文书
信访稳定工作汇报
2014/10/27 职场文书
离婚协议书的范本
2015/01/27 职场文书
付款证明模板
2015/06/19 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers