Descrição do requisito: Encontre um elemento de matriz de um conjunto de strings organizadas em diferentes ordens de um conjunto de matrizes. Se houver uma matriz como esta:
A cópia do código é a seguinte:
['ABCD', 'Hello', 'Bdca', 'Olleh', 'Cadb', 'NBA', 'ABN', 'ABC']
Os resultados a serem encontrados são:
A cópia do código é a seguinte:
['ABCD', 'BDCA', 'CADB']
Então, o ponto -chave aqui é determinar se um conjunto de strings é apenas uma ordem diferente de caracteres. Enquanto todo o ponto -chave for resolvido, será mais fácil fazer.
Método 1:
A cópia do código é a seguinte:
var stringClassify = function (arr) {
var ArrLength = arr.length,
obj = {},
i = 0,
NUM, ITEM, NOME, FIRSTITEM, STRLENGLE;
para (; i <arnLength; i ++) {
item = arr [i];
strLength = item.length;
num = 0;
// Converter caracteres únicos em codificação unicode
// busca e calcule a codificação
for (j = 0; j <strlength; j ++) {
num += item.charcodeat (j);
}
if (! FirstItem) {
FirstItem = item;
obj [num] .push (item);
}
// Verifique se o primeiro caractere da string a ser adicionado é se o
// aparecem em outra string para evitar o seguinte
// ['ad', 'da', 'bc']
caso contrário, se (~ FirstItem.IndexOF (item.Charat (0))) {
obj [num] .push (item);
}
}
para (nome em obj) {
console.log (obj [nome]);
}
};
O método 1 usa atravessar cada caractere na sequência e depois converter um único caractere em codificação unicode e executando a soma das codificações. As somas de codificação do ABCD e BDCA serão consistentes. Por fim, use a codificação e a chave como objeto para salvar a sequência codificada e consistente.
Método 1 Deve -se notar que a codificação do Unicode da string "AD" e "BC" é a mesma. No momento, você precisa adicionar um julgamento adicional para detectar se o primeiro caractere em qualquer string apareceu em outra string.
Método 2:
A cópia do código é a seguinte:
var stringClassify = function () {
var ArrLength = arr.length,
obj = {},
i = 0,
Num, Item, Nome, Strarr, Newstr;
para (; i <arnLength; i ++) {
item = arr [i];
STRARR = arr [i] .split ('');
STRARR.SORT ();
newstr = Salarr.Join ('');
if (! obj [newstr]) {
obj [newstr] = [];
}
obj [newstr] .push (item);
}
para (nome em obj) {
console.log (obj [nome]);
}
};
O método 2 é converter a string em uma matriz e depois classificar a matriz. O ABCD e o BDCA se tornarão ABCD depois de classificá -lo com classificação. Use a string bem ordenada como a chave do objeto para salvar a string consistentemente classificada.
De fato, o princípio dos dois métodos é converter caracteres em codificação Unicode. No entanto, o método 1 é uma conversão explícita, enquanto a classificação usada no método 2 será implicitamente convertida.