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 新浪背投广告实现代码
Jul 07 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
Mar 28 Javascript
javascript动态控制服务器控件实例
Sep 05 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
Aug 13 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
Sep 23 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
Mar 09 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
Jun 30 Javascript
微信小程序中添加客服按钮contact-button功能
Apr 27 Javascript
深入理解Vue nextTick 机制
Apr 28 Javascript
详解基于vue的服务端渲染框架NUXT
Jun 20 Javascript
Vue 开发音乐播放器之歌手页右侧快速入口功能
Aug 08 Javascript
学习LayUI时自研的表单参数校验框架案例分析
Jul 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编程过程中需要了解的this,self,parent的区别
2009/12/30 PHP
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
PHP Global变量定义当前页面的全局变量实现探讨
2013/06/05 PHP
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
PHP中生成UUID自定义函数分享
2015/06/10 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
javascript concat数组累加 示例
2009/09/03 Javascript
javascript中的一些注意事项 更新中
2010/12/06 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
没有document.getElementByName方法
2013/08/19 Javascript
无刷新预览所选择的图片示例代码
2014/04/02 Javascript
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
2017/07/10 Javascript
vue 简单自动补全的输入框的示例
2018/03/12 Javascript
又拍云 Node.js 实现文件上传、删除功能
2018/10/28 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
微信小程序自定义弹出层效果
2020/05/26 Javascript
零基础写python爬虫之抓取糗事百科代码分享
2014/11/06 Python
python+mongodb数据抓取详细介绍
2017/10/25 Python
使用Eclipse如何开发python脚本
2018/04/11 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
Python Web框架之Django框架Model基础详解
2019/08/16 Python
python3实现往mysql中插入datetime类型的数据
2020/03/02 Python
python实现TCP文件传输
2020/03/20 Python
纽约海:Sea New York
2018/11/04 全球购物
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
学校司机岗位职责
2013/11/14 职场文书
党校培训自我鉴定范文
2014/04/10 职场文书
质量主管工作职责
2014/09/26 职场文书
行政介绍信范文
2015/05/04 职场文书
Vue全局事件总线你了解吗
2022/02/24 Vue.js
mysql中DCL常用的用户和权限控制
2022/03/31 MySQL