要件の説明:配列のセットから異なる注文で配置された文字列のセットの配列要素を見つけます。このような配列がある場合:
コードコピーは次のとおりです。
['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、strength;
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(objの名前){
console.log(obj [name]);
}
};
方法1では、文字列内の各文字をトラバースし、単一の文字をUnicodeエンコードに変換し、エンコーディングの合計を実行します。 ABCDとBDCAのエンコーディング合計は一貫しています。最後に、オブジェクトとしてエンコードされたキーとキーを使用して、エンコードされた一貫した文字列を保存します。
方法1文字列「AD」と「BC」のユニコードエンコードは同じであることに注意してください。現時点では、任意の文字列の最初の文字が別の文字列に表示されているかどうかを検出するために、追加の判断を追加する必要があります。
方法2:
コードコピーは次のとおりです。
var stringclassify = function(){
var arrlength = arr.length、
obj = {}、
i = 0、
num、item、name、strarr、newtr;
for(; i <arrlength; i ++){
item = arr [i];
strarr = arr [i] .split( '');
strarr.sort();
newtr = strarr.join( '');
if(!obj [newtr]){
obj [newtr] = [];
}
obj [newtr] .push(item);
}
for(objの名前){
console.log(obj [name]);
}
};
方法2は、文字列を配列に変換し、配列を並べ替えることです。 ABCDとBDCAは、ソートでソートした後、ABCDになります。オブジェクトのキーとして、秩序だった文字列を使用して、一貫してソートされた文字列を保存します。
実際、2つの方法の原則は、文字をUnicodeエンコーディングに変換することです。ただし、方法1は明示的な変換であり、方法2で使用されるソートは暗黙的に変換されます。