Perihalan keperluan: Cari elemen tatasusunan bagi set rentetan yang disusun dalam susunan berbeza daripada set tatasusunan. Katakan terdapat tatasusunan sedemikian:
[ 'abcd', 'hello', 'bdca', 'olleh', 'cadb', 'nba', 'abn', 'abc' ]
Hasil yang akan ditemui ialah:
[ 'abcd', 'bdca', 'cadb' ]
Perkara utama di sini ialah untuk menentukan sama ada set rentetan hanya mempunyai susunan aksara yang berbeza Selagi keseluruhan perkara utama diselesaikan, segala-galanya akan mudah dikendalikan.
Kaedah 1:
var stringClassify = function( arr ){
var arrLength = arr.length,
obj = {},
i = 0,
nombor, item, nama, item pertama, strLength;
untuk( ; i < arrLength; i ){
Item = arr[i];
strLength = item.length;
bilangan = 0;
// Tukar aksara tunggal kepada pengekodan Unikod
// Kira jumlah kod
untuk( j = 0; j < strLength; j ){
nombor = item.charCodeAt( j );
Jika( !firstItem ){
1stItem = item;
obj[num].push(item);
}
// Semak sama ada aksara pertama rentetan yang akan ditambah ialah
// Muncul dalam rentetan lain untuk mengelakkan situasi berikut
// ['ad', 'da', 'bc']
lain jika( ~firstItem.indexOf(item.charAt(0)) ){
obj[num].push(item);
}
}
untuk( nama dalam obj ){
console.log( obj[nama] );
}
};
Kaedah 1 merentasi setiap aksara dalam rentetan, kemudian menukar aksara tunggal kepada pengekodan Unikod dan mengira jumlah pengekodan Jumlah pengekodan abcd dan bdca akan konsisten. Akhir sekali, gunakan pengekodan dan kekunci sebagai objek untuk menyimpan pengekodan dan rentetan yang konsisten.
Kaedah 1 Perlu diingat bahawa pengekodan Unikod rentetan "iklan" dan "bc" adalah sama Pada masa ini, pertimbangan tambahan diperlukan untuk mengesan sama ada aksara pertama dalam mana-mana rentetan muncul dalam rentetan yang lain . Ia hanya perlu muncul dalam rentetan.
Kaedah 2:
Salin kod Kod adalah seperti berikut:
var stringClassify = function(){
var arrLength = arr.length,
obj = {},
i = 0,
nombor, item, nama, strArr, newStr;
untuk( ; i < arrLength; i ){
Item = arr[i];
strArr = arr[i].split( '' );
strArr.sort();
newStr = strArr.join( '' );
Jika( !obj[newStr] ){
obj[ newStr ] = [];
}
obj[ newStr ].push( item );
}
untuk( nama dalam obj ){
console.log( obj[nama] );
}
};
Kaedah 2 ialah menukar rentetan kepada tatasusunan dan kemudian mengisih tatasusunan dan bdca akan menjadi abcd selepas mengisih sebagai kunci objek untuk menyimpan rentetan dengan pengisihan yang sama.
Malah, prinsip kedua-dua kaedah adalah untuk menukar aksara kepada pengekodan Unikod, tetapi kaedah 1 ialah penukaran eksplisit, manakala isihan yang digunakan dalam kaedah 2 akan ditukar secara tersirat.