JavaScript实现在数组中查找不同顺序排列的字符串

 更新时间:2014年09月26日 11:38:50   投稿:junjie  
这篇文章主要介绍了JavaScript实现在数组中查找不同顺序排列的字符串,本文用两个方法解决了这道算法题,需要的朋友可以参考下

需求描述:从一组数组中找出一组按不同顺序排列的字符串的数组元素。假如有这样一个数组:

复制代码 代码如下:

[ '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 highcharts 饼图显示数量和百分比实例代码

    Javascript highcharts 饼图显示数量和百分比实例代码

    这篇文章主要介绍了Javascript highcharts 饼图显示数量和百分比实例代码的相关资料,这里附有实例代码,需要的朋友可以参考下
    2016-12-12
  • 响应式表格之固定表头的简单实现

    响应式表格之固定表头的简单实现

    下面小编就为大家带来一篇响应式表格之固定表头的简单实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • JavaScript屏蔽指定区域内右键菜单

    JavaScript屏蔽指定区域内右键菜单

    有时候需要屏蔽部分区域内的右键菜单,下面的代码大家可以测试下。
    2010-03-03
  • 写出更好的JavaScript之undefined篇(上)

    写出更好的JavaScript之undefined篇(上)

    先声明一些东西,消除歧义:这篇博文中的JavaScript是指一般意义上的JavaScript,并不只限定“自称是JavaScript”的运行环境
    2009-11-11
  • 详解cocoscreater预制体prefab

    详解cocoscreater预制体prefab

    这篇文章主要介绍了详解cocoscreater预制体prefab的作用和使用方法,对此感兴趣的同学,可以回去试一试
    2021-04-04
  • javaScript基础详解

    javaScript基础详解

    本文主要介绍了javaScript的基础知识,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • webix+springmvc session超时跳转登录页面

    webix+springmvc session超时跳转登录页面

    这篇文章主要介绍了webix+springmvc session超时跳转登录页面的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • Bootstrap按钮功能之查询按钮和重置按钮

    Bootstrap按钮功能之查询按钮和重置按钮

    一般情况下,查询列表有查询条件、查询按钮和重置按钮,输入查询条件,点击查询按钮查询列表等数据;点击重置按钮会将查询条件恢复到原始状态。接下来通过本文给大家介绍bootstrap实现查询按钮和重置按钮的方法,一起看看吧
    2016-10-10
  • 潜说js对象和数组

    潜说js对象和数组

    潜说js对象和数组 对象是一个无序属性集合, 每个属性都有自己的名字和值
    2011-05-05
  • javascript跨域的方法汇总

    javascript跨域的方法汇总

    JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦。这里把涉及到跨域的一些问题简单地整理一下
    2015-10-10

最新评论