JavaScript實現在數組中尋找不同順序排列的字串

來源:互聯網
上載者:User

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

  代碼如下:

  [ '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 排序,會隱式的轉換。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.