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 相关文章推荐
phpwind放自动注册方法
Dec 02 Javascript
在页面上点击任一链接时触发一个事件的代码
Apr 07 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
Apr 25 Javascript
jQuery实现验证年龄简单思路
Feb 24 Javascript
全面理解JavaScript中的继承(必看)
Jun 16 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
Jun 28 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
Dec 12 Javascript
vue实现仿淘宝结账页面实例代码
Nov 08 Javascript
js获取html页面代码中图片地址的实现代码
Mar 05 Javascript
一文了解Vue中的nextTick
May 06 Javascript
layui监听单元格编辑前后交互的例子
Sep 16 Javascript
JavaScript 防盗链的原理以及破解方法
Dec 29 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
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
js异或加解密效果代码
2008/06/25 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
使用vue.js编写蓝色拼图小游戏
2017/03/17 Javascript
javascript和php使用ajax通信传递JSON的实例
2018/08/21 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
[02:54]辉夜杯主赛事第二日败者组 iG.V赛后采访
2015/12/26 DOTA
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python生成随机MAC地址
2015/03/10 Python
python抓取百度首页的方法
2015/05/19 Python
Python 26进制计算实现方法
2015/05/28 Python
python脚本作为Windows服务启动代码详解
2018/02/11 Python
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
python 调用钉钉机器人的方法
2019/02/20 Python
Python实现字符串中某个字母的替代功能
2019/10/21 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
大学生村官事迹材料
2014/01/21 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
高速铁道技术专业求职信
2014/08/09 职场文书
信访维稳工作汇报
2014/10/27 职场文书
出纳2015年度工作总结范文
2015/10/14 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
实习员工转正的评语汇总,以备不时之需
2019/12/17 职场文书
Python 批量下载阴阳师网站壁纸
2021/05/19 Python