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 相关文章推荐
将函数的实际参数转换成数组的方法
Jan 25 Javascript
jQuery对象[0]是什么含义?
Jul 31 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
Aug 01 Javascript
jqgrid 编辑添加功能详细解析
Nov 08 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
Jan 15 Javascript
javascript实现实时输出当前的时间
Apr 27 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
Aug 01 Javascript
BootStrap Table对前台页面表格的支持实例讲解
Dec 22 Javascript
AngularJS的Filter的示例详解
Mar 07 Javascript
jquery DataTable实现前后台动态分页
Jun 17 jQuery
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
Sep 04 Javascript
在 HTML 页面中使用 React的场景分析
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
ioncube_loader_win_5.2.dll的错误解决方法
2015/01/04 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
js的正则test,match,exec详细解析
2014/01/29 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
2017/03/09 Javascript
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
对Vue beforeRouteEnter 的next执行时机详解
2018/08/25 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
Python学习笔记之常用函数及说明
2014/05/23 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
python开发之IDEL(Python GUI)的使用方法图文详解
2015/11/12 Python
Python实现简单字典树的方法
2016/04/29 Python
pandas DataFrame数据转为list的方法
2018/04/11 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
2019/07/04 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
2020/02/06 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
运行Python编写的程序方法实例
2020/10/21 Python
EVE LOM英国官网:全世界最好的洁面膏
2017/10/30 全球购物
中国电子产品批发商/跨境电商/外贸网:Sunsky-online
2020/04/20 全球购物
什么是数据抽象
2016/11/26 面试题
英语文学专业学生的自我评价
2013/10/31 职场文书
小学开学寄语
2014/01/19 职场文书
大学生实习推荐信
2015/03/27 职场文书
教师旷工检讨书
2015/08/15 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python