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 相关文章推荐
5款Javascript颜色选择器
Oct 25 Javascript
JQuery 操作Javascript对象和数组的工具函数小结
Jan 22 Javascript
JS 实现导航栏悬停效果(续)
Sep 24 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
May 09 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
Dec 07 Javascript
easyui validatebox验证
Apr 29 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
Jul 08 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
Aug 24 Javascript
了解ESlint和其相关操作小结
May 21 Javascript
layui table 参数设置方法
Aug 14 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
Apr 11 Javascript
vue+vant实现购物车全选和反选功能
Nov 17 Vue.js
前端轻量级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学习笔记(二):变量详解
2015/04/17 PHP
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
jQuery学习7 操作JavaScript对象和集合的函数
2010/02/07 Javascript
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
JavaScript实现左右下拉框动态增删示例
2017/03/09 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
浅谈Angular 中何时取消订阅
2017/11/22 Javascript
Thinkjs3新手入门之添加一个新的页面
2017/12/06 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
vue使用echarts图表的详细方法
2018/10/22 Javascript
vue使用自定义指令实现拖拽
2021/01/29 Javascript
一步一步实现Vue的响应式(对象观测)
2019/09/02 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
高效jQuery选择器的5个技巧实例分析
2019/11/26 jQuery
Vue.js仿Select下拉框效果
2020/02/18 Javascript
JavaScript Window浏览器对象模型原理解析
2020/05/30 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
2018/01/11 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
python中比较两个列表的实例方法
2019/07/04 Python
python爬虫开发之selenium模块详细使用方法与实例全解
2020/03/09 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
Python中qutip用法示例详解
2020/10/02 Python
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
给校长的建议书300字
2014/05/16 职场文书
小学兴趣小组活动总结
2014/07/07 职场文书
个人安全生产责任书
2014/07/28 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
餐饮服务食品安全承诺书
2015/04/29 职场文书
2015年秋季开学典礼校长致辞
2015/07/16 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL