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中的property和attribute介绍
Dec 26 Javascript
Javascript Web Slider 焦点图示例源码
Oct 10 Javascript
js换图片效果可进行定时操作
Jun 09 Javascript
AngularJS使用指令增强标准表单元素功能
Jul 01 Javascript
D3.js实现直方图的方法详解
Sep 25 Javascript
JS库之Highlight.js的用法详解
Sep 13 Javascript
vue非父子组件通信问题及解决方法
Jun 11 Javascript
JavaScript使用math.js进行精确计算操作示例
Jun 19 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
Jul 13 Javascript
Vue实现移动端页面切换效果【推荐】
Nov 13 Javascript
js实现从右往左匀速显示图片(无缝轮播)
Jun 29 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
Sep 21 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 页面执行时间计算代码
2008/12/04 PHP
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
给jqGrid数据行添加修改和删除操作链接(之一)
2011/11/04 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
分享两款带遮罩的jQuery弹出框
2015/12/30 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
解决layui弹框失效的问题
2019/09/09 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
vue+vant实现购物车全选和反选功能
2020/11/17 Vue.js
Python下载懒人图库JavaScript特效
2015/05/28 Python
Python爬取附近餐馆信息代码示例
2017/12/09 Python
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
详解字符串在Python内部是如何省内存的
2020/02/03 Python
如何使用Cython对python代码进行加密
2020/07/08 Python
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
英国排名第一的最新设计师品牌手表独立零售商:TIC Watches
2016/09/24 全球购物
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
Java程序员面试90题
2013/10/19 面试题
员工入职担保书范文
2014/04/01 职场文书
演讲稿的写法
2014/05/19 职场文书
最常使用的求职信
2014/05/25 职场文书
提拔干部考察材料
2014/05/26 职场文书
数学兴趣小组活动总结
2014/07/08 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
婚礼证婚人演讲稿
2014/09/13 职场文书
会议开幕词
2015/01/28 职场文书
订货会主持词
2015/07/01 职场文书
如何用Navicat操作MySQL
2021/05/12 MySQL
Golang 链表的学习和使用
2022/04/19 Golang