Deskripsi Persyaratan: Temukan elemen array dari satu set string yang diatur dalam pesanan berbeda dari satu set array. Jika ada array seperti ini:
Salinan kode adalah sebagai berikut:
['abcd', 'halo', 'bdca', 'olleh', 'cadb', 'nba', 'abn', 'abc']
Hasil yang dapat ditemukan adalah:
Salinan kode adalah sebagai berikut:
['abcd', 'bdca', 'cadb']
Maka titik kunci di sini adalah untuk menentukan apakah satu set string hanyalah urutan karakter yang berbeda. Selama seluruh titik kunci diselesaikan, itu akan lebih mudah dilakukan.
Metode 1:
Salinan kode adalah sebagai berikut:
var stringclassify = function (arr) {
var arrlength = arr.length,
obj = {},
i = 0,
num, item, nama, firstitem, strlength;
untuk (; i <arrlength; i ++) {
item = arr [i];
strlength = item.length;
num = 0;
// Konversi karakter tunggal menjadi penyandian unicode
// Ambil dan hitung penyandian
untuk (j = 0; j <strlength; j ++) {
num += item.charcodeat (j);
}
if (! firstItem) {
firstItem = item;
obj [num] .push (item);
}
// Periksa apakah karakter pertama dari string yang akan ditambahkan adalah apakah
// muncul di string lain untuk menghindari yang berikut
// ['ad', 'da', 'bc']
lain if (~ firstitem.indexof (item.charat (0))) {
obj [num] .push (item);
}
}
untuk (nama dalam obj) {
console.log (obj [nama]);
}
};
Metode 1 menggunakan melintasi setiap karakter dalam string, dan kemudian mengubah satu karakter ke pengkodean unicode, dan melakukan penjumlahan dari pengkodean. Jumlah pengkodean ABCD dan BDCA akan konsisten. Akhirnya, gunakan yang dikodekan dan kunci sebagai objek untuk menyimpan string yang dikodekan dan konsisten.
Metode 1 Perlu dicatat bahwa pengkodean unicode dari string "AD" dan "BC" adalah sama. Pada saat ini, Anda perlu menambahkan penilaian tambahan untuk mendeteksi apakah karakter pertama dalam string apa pun telah muncul di string lain.
Metode 2:
Salinan kode adalah sebagai berikut:
var stringclassify = function () {
var arrlength = arr.length,
obj = {},
i = 0,
num, item, nama, strarr, newstr;
untuk (; i <arrlength; i ++) {
item = arr [i];
strarr = arr [i] .split ('');
strarr.sort ();
newstr = strarr.join ('');
if (! obj [newstr]) {
obj [newstr] = [];
}
obj [newstr] .push (item);
}
untuk (nama dalam obj) {
console.log (obj [nama]);
}
};
Metode 2 adalah untuk mengubah string menjadi array dan kemudian mengurutkan array. ABCD dan BDCA akan menjadi ABCD setelah menyortirnya dengan baik. Gunakan string yang dipesan dengan baik sebagai kunci objek untuk menyimpan string yang diurutkan secara konsisten.
Faktanya, prinsip kedua metode ini adalah untuk mengubah karakter menjadi pengkodean unicode. Namun, Metode 1 adalah konversi eksplisit, sedangkan jenis jenis yang digunakan dalam Metode 2 akan secara implisit dikonversi.