首頁 >web前端 >js教程 >JavaScript實作在陣列中尋找不同順序排列的字串_javascript技巧

JavaScript實作在陣列中尋找不同順序排列的字串_javascript技巧

WBOY
WBOY原創
2016-05-16 16:35:151269瀏覽

需求描述:從一組陣列中找出一組以不同順序排列的字串的陣列元素。假如有這樣一個陣列:

複製程式碼 程式碼如下:

[ '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         item = arr[i];
        strLength = item.length;
        num = 0;
 
        // 將單一的字元轉換成 Unicode 編碼
        // 對編碼進行取與計算
        for( j = 0; 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         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 排序,會隱式的轉換。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn