要件の説明: 配列のセットから、異なる順序で配置された文字列のセットの配列要素を見つけます。次のような配列があるとします:
[ '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
項目 = arr[i];
strLength = item.length;
num = 0;
// 単一文字を Unicode エンコードに変換します
// コードの合計を計算します
for( j = 0; j
num = item.charCodeAt( j );
If( !firstItem ){
1stItem = item;
obj[num].push(item);
}
// 追加する文字列の最初の文字が
であるかどうかを確認します
// 次の状況を避けるために別の文字列に表示します
// ['ad', 'da', 'bc']
else if( ~firstItem.indexOf(item.charAt(0)) ){
obj[num].push(item);
}
}
for( obj 内の名前){
console.log( obj[名前] );
}
};
方法 1 では、文字列内の各文字を調べて、単一の文字を Unicode エンコーディングに変換し、エンコーディングの合計を計算します。abcd と bdca のエンコーディングの合計は一致します。最後に、エンコーディングとキーをオブジェクトとして使用して、エンコーディングと一貫した文字列を保存します。
方法 1 文字列「ad」と「bc」の Unicode エンコードが同じであることに注意してください。このとき、いずれかの文字列の最初の文字が他の文字列に出現するかどうかを検出するために追加の判断が必要です。文字列内にのみ出現する必要があります。
方法 2:
コードをコピー コードは次のとおりです:
var stringClassify = function(){
var arrLength = arr.length,
obj = {},
i = 0,
番号、項目、名前、strArr、newStr;
for( ; i
項目 = arr[i];
strArr = arr[i].split( '' );
strArr.sort();
newStr = strArr.join( '' );
If( !obj[newStr] ){
obj[ newStr ] = [];
}
obj[ newStr ].push( item );
}
for( obj 内の名前){
console.log( obj[名前] );
}
};
方法 2 は、文字列を配列に変換し、その配列をソートすると、ソートされた文字列をオブジェクトのキーとして使用し、同じソートで保存します。
実際、両方のメソッドの原理は文字を Unicode エンコーディングに変換することですが、メソッド 1 は明示的な変換ですが、メソッド 2 で使用される並べ替えは暗黙的に変換されます。