Словарь
Словарь (Словарь) является своего родапара ключ-значениеСтруктура данных, которая хранит данные в форме, такая же, как когда мы обычно проверяем адресную книгу.Чтобы найти телефон, мы сначала находим имя владельца номера.После того, как имя найдено, номер телефона также доступен. Ключевым моментом здесь является то, что вы используете для поиска, в данном случае имя, а значением является результат поиска, то есть соответствующий номер телефона.
На самом деле класс Object в JavaScript выполнен в виде словаря, далее мы воспользуемся характеристиками класса Object для самостоятельной реализации класса Dictionary, чтобы сделать этот словарный тип объекта более удобным в использовании.
Реализация словаря
Основой класса Dictionary является класс Array.
Подобно структуре данных, которую мы видели ранее, класс словаря также должен иметь такие операции, как добавление, удаление и очистка, поэтому мы можем сначала определить базовый тип данных класса словаря, как показано ниже.
С приведенными выше определениями типов данных определение нашего конструктора класса Dictionary легко решается.
//字典类
function Dictionary () {
this.dataStore = [];
this.add = add; // 添加元素
this.find = find; // 查找元素
this.remove = remove; // 删除元素
this.count = count; // 字典中元素个数
this.showAll = showAll; // 显示字典元素
this.clear = clear; // 清空字典
}
add: добавить элемент в словарь
Мы также упоминали выше, что словарь хранит данные в виде пар ключ-значение, поэтому метод add должен принимать два параметра, а именно ключ и значение, где ключ представляет собой его индекс в словаре, что реализовано следующим образом.
//向字典添加元素
function add( key , value ){
this.dataStore[key] = value;
}
Да, это так просто! Далее давайте взглянем на метод find
find: найти элемент в словаре
Мы храним его в парах ключ-значение, поэтому нам нужно только передать ключ для поиска, и мы можем логически получить соответствующее значение, что также очень просто для массивов в JS;
//查找字典中的元素
function find( key ){
return this.dataStore[key];
}
С добавить и найти, удалить!
remove: удалить элемент из словаря
Чтобы удалить элемент в словаре, то есть удалить пару ключ-значение, нам нужно использовать встроенную функцию, предоставляемую JS: delete, эта функция нам не чужда, она может удалить ключ и соответствующее ему значение в то же время, то метод удаления Определение простое
//删除一个元素
function remove( key ){
if( this.dataStore[key] ) delete this.dataStore[key];
else return 'Not Found';
}
В дополнение к этому мы также хотим отобразить все пары ключ-значение в словаре, и метод showAll делает это.
showAll: Показать все пары ключ-значение в словаре.
//显示字典元素
function showAll () {
for( var key in this.dataStore ){
console.log( key + '->' + this.dataStore[key] );
}
}
Основные операции со словарем мы выполнили, теперь проведем небольшой тест,
//实例化字典类
var directory = new Dictionary();
//添加元素
directory.add( 'Jack' , '138****5505' );
directory.add( 'Alice' , '156****6606');
directory.add( 'Tom' , '180****8808');
//显示字典
directory.showAll(); // Jack->138****5505
// Alice->156****6606
// Tom->180****8808
directory.remove( 'Tom' );
directory.showAll(); // Jack->138****5505
// Alice->156****6606
Когда мы его определили, то увидели, что есть еще два не реализованных метода, один count, другой clear, давайте реализуем вместе.
count: просмотреть количество элементов в словаре
Этот метод иногда бывает полезен, но его реализация может отличаться от того, что вы думаете. Давайте сначала посмотрим, как его реализовать.
//查看字典中元素的个数
function count(){
var n = 0 ;
for ( var key in this.dataStore ){
++n;
}
return n;
}
Как, это не то же самое, что я думал, почему бы не использовать свойство длины, не правда ли, очень просто? На самом деле, когда наш ключ является строкой, свойство длины массива не работает, см. следующий пример:
var nums = [ 0 , 1 , 2 ] ;
console.log(nums.length) // 3
var directory = [];
directory['Jack'] = '138****5505';
directory['Alice'] = '156****6606';
directory['Tom'] = '180****8808';
console.log(directory.length) // 0
Вы теперь понимаете другую яму! Ха-ха, давайте реализуем последний метод очистки.
очистить: очистить словарь
//清空字典
function clear(){
for( var key in this.dataStore ){
delete this.dataStore[key];
}
}
На данный момент функция словаря в основном завершена, мы используем приведенный выше код, чтобы продолжить, протестировать тест
console.log(directory.count()); // 2
directory.clear();
console.log(directory.count()); // 0
В словаре мы обычно используем ключ для получения значения, поэтому нам не нужно заботиться о фактическом порядке хранения данных s в словаре, но мы хотим видеть, что содержимое словаря отображается в порядке, который также очень просто, нам просто нужно немного изменить наш метод showAll.
//改造后的showAll
function showAll(){
var sortKeys = Object.keys(this.dataStore).sort();
for( var key in sortKeys ){
console.log( sortKeys[key] + '->' + this.dataStore[sortKeys[key]] );
}
}
Единственное отличие от нашего предыдущего метода в том, что после того, как мы получили ключ, мы делаем по нему сортировку, давайте посмотрим на вывод нового метода.
// 重新打印上述字典
directory.showAll(); // Alice->156****6606
// Jack->138****5505
// Tom->180****8808
Следует отметить, что в приведенном выше методе showAll после сортировки с помощью Object.keys().sort() возвращается новый массив, аналогичный следующей форме:
//sortKeys
["Alice", "Jack", "Tom"]
На данный момент ключами массива являются 0, 1 и 2. Разве это не намного яснее?
На данный момент мы в основном поняли часть содержимого словаря, и мы можем использовать JS для самостоятельной реализации словаря, некоторые из них просто великолепны! Далее, давай все~