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-RegExp对象只能使用一次问题解决方法
Jun 23 Javascript
jquery中filter方法用法实例分析
Feb 06 Javascript
jQuery实现输入框邮箱内容自动补全与上下翻动显示效果【附demo源码下载】
Sep 20 Javascript
常用Javascript函数与原型功能收藏(必看篇)
Oct 09 Javascript
JS中用childNodes获取子元素换行会产生一个子元素
Dec 08 Javascript
canvas实现图像放大镜
Feb 06 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
Jun 13 Javascript
vue页面加载闪烁问题的解决方法
Mar 28 Javascript
vue-router实现编程式导航的代码实例
Jan 19 Javascript
JavaScript监听一个DOM元素大小变化
Apr 26 Javascript
vue全局使用axios的操作
Sep 08 Javascript
React更新渲染原理深入分析
Dec 24 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/02/15 PHP
CI框架学习笔记(二) -入口文件index.php
2014/10/27 PHP
一个js拖拽的效果类和dom-drag.js浅析
2010/07/17 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
Dojo Javascript 编程规范 规范自己的JavaScript书写
2014/10/26 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
js模式化窗口问题![window.dialogArguments]
2016/10/30 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
详解vue-cli构建项目反向代理配置
2017/09/07 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
2020/07/31 Javascript
Python3写入文件常用方法实例分析
2015/05/22 Python
python中数据爬虫requests库使用方法详解
2018/02/11 Python
python opencv 直方图反向投影的方法
2018/02/24 Python
Python中一些不为人知的基础技巧总结
2018/05/19 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
使用pandas把某一列的字符值转换为数字的实例
2019/01/29 Python
Python操作Jira库常用方法解析
2020/04/10 Python
Django之腾讯云短信的实现
2020/06/12 Python
python合并多个excel文件的示例
2020/09/23 Python
香港太阳眼镜网上商店:SmartBuyGlasses香港
2016/07/22 全球购物
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
某公司C#程序员面试题笔试题
2014/05/26 面试题
房地产销售大学生自我评价分享
2013/11/11 职场文书
前台领班岗位职责
2013/12/04 职场文书
党员教师个人对照检查材料(群众路线)
2014/09/26 职场文书
2014年药房工作总结
2014/11/22 职场文书
高三复习计划
2015/01/19 职场文书
西安大雁塔导游词
2015/02/10 职场文书
培训通知书模板
2015/04/17 职场文书
中学政教处工作总结
2015/08/13 职场文书
Web前端:CSS最强总结 附详细代码
2021/03/31 HTML / CSS