6.1 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
8d5823c8c441eddfaeb5bdef | Створення структури даних Map (карта) | 1 | 301629 | create-a-map-data-structure |
--description--
Наступні кілька завдань будуть присвячені картам та геш-таблицям. Карти - це структури даних, в яких зберігаються пари ключ-значення. В JavaScript вони доступні нам у вигляді об'єктів. Карти забезпечують швидкий пошук збережених елементів на основі ключових значень та є дуже поширеними й корисними структурами даних.
--instructions--
Попрактикуймося ж трохи у створенні нашої власної карти. Оскільки об'єкти JavaScript забезпечують ефективнішу структуру карт, ніж будь-що, що ми могли б написати тут, ця вправа насамперед є навчальною. Однак об'єкти JavaScript лише надають нам доступ до певних операцій. А якщо ж ми захочемо визначити власні операції для користувачів? Використовуйте наданий тут об'єкт Map
як обгортку навколо object
у JavaScript. Створіть такі методи та операції для об'єкта Map:
add
приймає паруkey, value
і додає до карти.remove
приймає ключ та видаляє пов'язану з ним паруkey, value
get
приймає ключkey
та повертає збережене значенняvalue
has
приймає ключkey
та повертає true, якщо ключ існує, або false, якщо його не існує.values
повертається як масив усіх значень на картіsize
повертається як кількість елементів на картіclear
очищає карту
--hints--
Повинна існувати структура даних Map.
assert(
(function () {
var test = false;
if (typeof Map !== 'undefined') {
test = new Map();
}
return typeof test == 'object';
})()
);
Об'єкт Map має містити такі методи: add, remove, get, has, values, clear, and size.
assert(
(function () {
var test = false;
if (typeof Map !== 'undefined') {
test = new Map();
}
return (
typeof test.add == 'function' &&
typeof test.remove == 'function' &&
typeof test.get == 'function' &&
typeof test.has == 'function' &&
typeof test.values == 'function' &&
typeof test.clear == 'function' &&
typeof test.size == 'function'
);
})()
);
Метод add має додавати елементи до карти.
assert(
(function () {
var test = false;
if (typeof Map !== 'undefined') {
test = new Map();
}
test.add(5, 6);
test.add(2, 3);
test.add(2, 5);
return test.size() == 2;
})()
);
Метод has має повертати true для доданих елементів та false - для відсутніх.
assert(
(function () {
var test = false;
if (typeof Map !== 'undefined') {
test = new Map();
}
test.add('test', 'value');
return test.has('test') && !test.has('false');
})()
);
Метод get має приймати ключі в якості вхідних даних та повертати пов'язані з ними значення.
assert(
(function () {
var test = false;
if (typeof Map !== 'undefined') {
test = new Map();
}
test.add('abc', 'def');
return test.get('abc') == 'def';
})()
);
Метод values має повертати всі значення, що зберігаються в карті, у вигляді рядків масиву.
assert(
(function () {
var test = false;
if (typeof Map !== 'undefined') {
test = new Map();
}
test.add('a', 'b');
test.add('c', 'd');
test.add('e', 'f');
var vals = test.values();
return (
vals.indexOf('b') != -1 &&
vals.indexOf('d') != -1 &&
vals.indexOf('f') != -1
);
})()
);
Метод clear має очистити карту, а метод size - повернути кількість елементів, що місяться в карті.
assert(
(function () {
var test = false;
if (typeof Map !== 'undefined') {
test = new Map();
}
test.add('b', 'b');
test.add('c', 'd');
test.remove('asdfas');
var init = test.size();
test.clear();
return init == 2 && test.size() == 0;
})()
);
--seed--
--seed-contents--
var Map = function() {
this.collection = {};
// Only change code below this line
// Only change code above this line
};
--solutions--
var Map = function() {
this.collection = {};
// Only change code below this line
this.add = function(key,value) {
this.collection[key] = value;
}
this.remove = function(key) {
delete this.collection[key];
}
this.get = function(key) {
return this.collection[key];
}
this.has = function(key) {
return this.collection.hasOwnProperty(key)
}
this.values = function() {
return Object.values(this.collection);
}
this.size = function() {
return Object.keys(this.collection).length;
}
this.clear = function() {
for(let item of Object.keys(this.collection)) {
delete this.collection[item];
}
}
// Only change code above this line
};