Алгоритмы-и-структуры данных

Как определить карту и объект в JavaScript?

Что такое карта?

Карта - это тип структуры данных, который помогает хранить данные в виде пар "ключ-значение". У него есть каждый уникальный ключ и сопоставленное ему значение. Кроме того, поскольку каждый сохраненный ключ уникален, на карте нет повторяющихся ключей. но значение может быть дублировано. Карта - это экземпляр объекта.

var map = new Map();
console.log(map instanceof Object); //true

Особый случай: ключ и значение на карте могут быть любого типа данных, не ограничиваясь только строкой или целым числом. в качестве примера на Java, когда мы определяем HashMap, мы должны указать, какие типы данных имеют ключ и значение.

Map<String,String> map = new HashMap<String,String>()

но в этом случае нам не нужно упоминать типы данных при определении карт в JavaScript. Ниже я упомянул, как определить объект Map в JS в качестве примера.

let variable_map = new Map ();

let sampleMap = new Map();
sampleMap.set("key1", 1);
sampleMap.set("key2", "value1");
sampleMap.set(1, "value2");

Что такое объект?

объект следует той же концепции, что и карта, т. Е. Использует пары ключ-значение для хранения данных. Объект определенно не является экземпляром Карты. все объекты в Javascript являются экземплярами Object. В объекте также ключ («свойство») является уникальным и связан с одним значением. в соответствии с функциями ES6, когда мы присваиваем новое значение существующему свойству. новое значение будет заменено предыдущим.

var obj = new Object();
console.log(obj instanceof Map); //false
  • В Object тип данных ключа ограничен целым числом, строками и символами. Но в Map это может быть любой тип данных (объект, массив и т. Д.).
let obj = {}; //Empty new object
obj[{ "ex": 2 }] = 3; 
// This is not aplicable. In object key-feild only allow integer, strings, and symbols. In Value field any data type will be allow.
let map = new Map(); //Empty new map
map.set({ "ex": 2 }, 3); 
// This is aplicable. In map you can use any data type as key and value

Есть три способа создать новый пустой объект:

let variable = {}; // с помощью скобок (1 шаг)

var obj = new Object (); // конструктором (2-шаговый)

var obj = новый объект; // тот же результат

var obj = Object.create (ноль); // с помощью Object.prototype.create (3-шаговый)

Доступ к элементу

Карта:

Map.prototype.get (ключ)

map.get(key)// value

Объект:

Object. ‹key› и Object [‘key’]

obj.key //value
obj['key'] //value

Добавление нового элемента

Карта:

Map.prototype.set ()

map.set("key","value"); //{1=>2, 2=>3, "key"=>"value"}

Но если вы передадите существующий ключ, он перезапишет значение, сопоставленное с этим ключом, новым значением.

Объект:

Объект. ‹key› = значение

Объект [‘key’] = значение

obj['grade'] = 'passs'; //{id: 1, gender: "male"}
obj.gender = 'fail';

И то, и другое в порядке и перезапишет существующее сопоставленное значение, если свойство уже существует.

let person = {
name: 'Rayan',
age: 20,
strength: 100
}
let warrior = {
age: 36,
strength: 1500
}
//I am going to assign warrior Object to person Object
let myworrior = Object.assign(person, warrior);
console.log(myworrior);
OUTPUT : { name: 'Rayan', age: 36, strength: 1500 }
// Did you see that, warrior object values overwrite person object values via using same key-feild.

Решим проблему.

Мы должны написать программу для подсчета и отображения количества повторений каждой буквы в предложении.

мы можем решить эту проблему с помощью карты и объекта.

let word = "These days I am studying";
  1. Во-первых, вам нужно удалить пробелы и поместить каждую букву в новый массив.
const wordArry = Array.from(word.replace(/ /g, ''));

2. Затем вы можете удалить каждую повторяющуюся букву и поместить ее на новую карту или объект.

Объект :

Input : 
wordArray : ['I', 'T', 'a', 'a', 'd','d', 'e', 'e', 'g', 'h','i', 'm', 'n', 's', 's','s', 't', 'u', 'y', 'y']
Result will be like this :
{T: 1,h: 1,e: 2,s: 3,d: 2,a: 2,y: 2,I: 1,m: 1,t: 1,u: 1,i: 1,n: 1,g: 1}

Карта :

//create new Empty Map object
var mapAllRepition = new Map();
// then, loop for i = 0 to stringArr.length do
// you can access array element using i
for (let i = 0; i < stringArr.length; i++) {                mapAllRepition.set(wordArry[i], (mapAllRepition.get(wordArry[i]) || 0) + 1);           
}
//now apply previous same logic when adding element 
// if same element come again and again every time add 1 and increse value using overwite feture in object and map.

Исходный код :