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 相关文章推荐
异步动态加载js与css文件的js代码
Sep 15 Javascript
JsRender for object语法简介
Oct 31 Javascript
JavaScript中string转换成number介绍
Dec 31 Javascript
JavaScript之Object类型介绍
Apr 01 Javascript
webpack2.0搭建前端项目的教程详解
Apr 05 Javascript
详解wow.js中各种特效对应的类名
Sep 13 Javascript
微信小程序用户自定义模版用法实例分析
Nov 28 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
Jan 07 Javascript
详解VueJS应用中管理用户权限
Feb 02 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
Aug 24 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
Nov 13 Javascript
Vue 设置axios请求格式为form-data的操作步骤
Oct 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
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
javascript some()函数用法详解
2014/11/13 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
2015/01/30 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
javascript编程起步(第五课)
2007/02/27 Javascript
JavaScript的9个陷阱及评点分析
2008/05/16 Javascript
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
checkbox 多选框 联动实现代码
2008/10/22 Javascript
JQuery做的一个简单的点灯游戏分享
2014/07/16 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
AngularJS动态绑定HTML的方法分析
2016/11/07 Javascript
jQuery实现的事件绑定功能基本示例
2017/10/11 jQuery
在小程序中使用Echart图表的示例代码
2018/08/02 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
2018/09/27 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
Tensorflow 同时载入多个模型的实例讲解
2018/07/27 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
摄影实习自我鉴定
2013/09/20 职场文书
成教自我鉴定
2013/10/27 职场文书
幼儿园运动会入场词
2014/02/10 职场文书
模具专业自荐信
2014/05/29 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
《为人民服务》教学反思
2016/02/20 职场文书
聘任书的格式及模板
2019/10/28 职场文书
Pytorch 如何实现常用正则化
2021/05/27 Python
图文详解matlab原始处理图像几何变换
2021/07/09 Python
python异步的ASGI与Fast Api实现
2021/07/16 Python