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 相关文章推荐
Dom 学习总结以及实例的使用介绍
Apr 24 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
Nov 15 Javascript
jQuery中ajax和post处理json的不同示例对比
Nov 02 Javascript
javascript动态设置样式style实例分析
May 13 Javascript
jquery实现Ctrl+Enter提交表单的方法
Jul 21 Javascript
JS常用函数和常用技巧小结
Oct 15 Javascript
Angularjs中使用轮播图指令swiper
May 30 Javascript
Angular+Node生成随机数的方法
Jun 16 Javascript
Vue 页面跳转不用router-link的实现代码
Apr 12 Javascript
在vue中使用echarts图表实例代码详解
Oct 22 Javascript
js实现AI五子棋人机大战
May 28 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
Jun 04 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
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
jQuery学习总结之元素的相对定位和选择器(持续更新)
2011/04/26 Javascript
js实现在字符串中提取数字
2013/11/05 Javascript
jQuery控制TR显示隐藏的几种方法
2014/06/18 Javascript
JavaScript参数个数可变的函数举例说明
2014/10/10 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
jQuery中的一些小技巧
2017/01/18 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
详解ES6 Promise对象then方法链式调用
2018/10/20 Javascript
微信小程序API—获取定位的详解
2019/04/30 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
Python中import机制详解
2017/11/14 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
利用PyTorch实现VGG16教程
2020/06/24 Python
24个canvas基础知识小结
2014/12/17 HTML / CSS
亚洲颇具影响力的男性在线购物零售商:His
2019/11/24 全球购物
通信工程专业女生个人求职信
2013/09/21 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
广播体操比赛主持词
2015/06/29 职场文书
2019年聘任书的写作格式及范文!
2019/07/03 职场文书
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS
Redis中一个String类型引发的惨案
2021/07/25 Redis
python代码实现扫码关注公众号登录的实战
2021/11/01 Python
MongoDB数据库部署环境准备及使用介绍
2022/03/21 MongoDB
方法汇总:Python 安装第三方库常用
2022/04/26 Python