js算法常用数据结构

Map数据结构

Map 是一种非常有用的数据结构,它可以存储键值对,并且可以根据键快速查找值。Map 对象在 ES6 中被引入,使用起来非常方便,相比于 JavaScript 中的 Object ,它的功能更为强大。

  1. 对象的键必须是字符串或符号,而 Map 键可以是任何值,包括基本类型、对象或函数。

  1. Map 中的键是有序的,而添加到对象中的键则不是。因此,当对它进行遍历时, Map 对象是按插入顺序返回键值对。

  1. Map 可以更轻松地确定其大小,而对象中必须手动计算。

  1. Map 可以直接进行迭代,而对象需要从其键中获取一个数组,然后迭代该数组。

下面是一些关于 Map 对象的常用方法和属性:

set(key, value):添加一个键值对。
get(key):根据键获取对应的值。
has(key):判断是否包含指定的键。
delete(key):删除指定键值对。
clear():清空所有键值对。
size:获取 Map 对象的键值对数量。

创建一个 Map 对象:

constmyMap=newMap();

向 Map 中添加键值对:

myMap.set('key1', 'value1');
myMap.set('key2', 'value2');

从 Map 中获取值:

console.log(myMap.get('key1')); // 输出 "value1"

检查 Map 中是否包含某个键:

console.log(myMap.has('key1')); // 输出 true
console.log(myMap.has('key3')); // 输出 false

从 Map 中删除键值对:

myMap.delete('key1');
console.log(myMap.has('key1')); // 输出 false

遍历 Map 中的键值对:

myMap.forEach((value, key) => {
  console.log(key, value);
});
// 输出:
// key2 value2

Map 可以使用任何类型的键,包括对象和函数,例如:

const obj= { name: 'Alice' };
const func= () =>console.log('Hello!');
const myMap=newMap();
myMap.set(obj, 123);
myMap.set(func, 'world');
console.log(myMap.get(obj)); // 输出 123
myMap.get(func)(); // 输出 "Hello!"

下面是一个简单的例子,展示如何使用 Map 对象:

const myMap=new Map();
myMap.set('name', 'John');
myMap.set('age', 30);
console.log(myMap.get('name')); // 输出 "John"
console.log(myMap.has('age')); // 输出 true
console.log(myMap.size); // 输出 2
myMap.delete('age');
console.log(myMap.size); // 输出 1
myMap.clear();
console.log(myMap.size); // 输出 0

Map 对象还有一个非常有用的特性,就是它可以使用任意类型作为键。下面是一个使用对象作为键的例子:

const myMap=new Map();
const obj1= {name: 'John'};
const obj2= {name: 'Jane'};
myMap.set(obj1, 'foo');
myMap.set(obj2, 'bar');
console.log(myMap.get(obj1)); // 输出 "foo"
console.log(myMap.get(obj2)); // 输出 "bar"

Map 对象可以用于很多场景,比如缓存、记录数据等等。如果你需要使用键值对存储数据,并且需要根据键快速查找对应的值,那么 Map 对象是非常好的选择。

set数据结构

Set是一种数据结构,可以存储一组不重复的值,它可以用来过滤重复的数组元素或进行集合运算。下面是Set对象的几个常用方法:

1、add(value):向Set对象添加一个新的值,返回Set对象本身。如果值已经存在,则不进行操作。

const mySet=new Set();
mySet.add(1).add(2).add(3).add(2);
console.log(mySet); // Set(3) {1, 2, 3}

2、has(value):返回一个布尔值,表示Set对象是否包含指定的值。

const mySet=new Set([1, 2, 3]);
console.log(mySet.has(2)); // true
console.log(mySet.has(4)); // false

3、delete(value):删除Set对象中指定的值,返回一个布尔值,表示该值是否成功被删除。

const mySet=new Set([1, 2, 3]);
console.log(mySet.delete(2)); // true
console.log(mySet); // Set(2) {1, 3}
console.log(mySet.delete(4)); // false

4、clear():清空Set对象中所有的值。

const mySet=new Set([1, 2, 3]);
mySet.clear();
console.log(mySet); // Set(0) {}

5、size:返回Set对象中的值的数量。

const mySet=new Set([1, 2, 3]);
console.log(mySet.size); // 3

另外,Set对象还支持迭代器(Iterator)的相关方法,如keys()、values()、entries()和forEach()。这些方法可以用于遍历Set对象中的每一个值。

const mySet=new Set([1, 2, 3]);
console.log(mySet.keys()); // SetIterator {1, 2, 3}
console.log(mySet.values()); // SetIterator {1, 2, 3}
console.log(mySet.entries()); // SetIterator { [1, 1], [2, 2], [3, 3] }
mySet.forEach(function(value) {
  console.log(value);
});
// 1
// 2
// 3

以上就是Set对象中的一些常用方法,它们可以帮助我们在JavaScript中方便地处理一组不重复的值。

栈和数组

在 JavaScript 中,队列和栈都可以使用数组实现。队列是一种先进先出(FIFO)的数据结构,而栈是一种后进先出(LIFO)的数据结构。

队列的实现可以使用以下方法:

push() 方法将元素添加到队列的末尾。
shift() 方法从队列的头部删除并返回第一个元素。
unshift() 方法将元素添加到队列的头部。
pop() 方法从队列的尾部删除并返回最后一个元素。
length 属性表示队列中元素的数量。

以下是一个使用数组实现队列的示例:

const queue= [];
queue.push(1);      // 队列中添加元素 1
queue.push(2);      // 队列中添加元素 2
queue.shift();      // 从队列头部删除并返回第一个元素(1)
queue.push(3);      // 队列中添加元素 3
console.log(queue); // [2, 3]

栈的实现可以使用以下方法:

push() 方法将元素添加到栈的末尾。
pop() 方法从栈的末尾删除并返回最后一个元素。
length 属性表示栈中元素的数量。

以下是一个使用数组实现栈的示例:

const stack= [];
stack.push(1);      // 栈中添加元素 1
stack.push(2);      // 栈中添加元素 2
stack.pop();        // 从栈末尾删除并返回最后一个元素(2)
stack.push(3);      // 栈中添加元素 3
console.log(stack); // [1, 3]

需要注意的是,JavaScript 中的数组是动态的,即数组的长度可以随时改变。因此,如果需要实现固定大小的队列或栈,需要在程序中进行相应的控制。

字符串

JavaScript中字符串是一种基本数据类型,表示一串字符序列。字符串对象是一个包含一个或多个字符的字符串值。在JavaScript中,字符串是不可变的,即不能改变字符串中的字符。以下是一些常用的字符串方法:

1、字符串长度:通过.length属性获取字符串的长度。

const str="Hello, World!";
console.log(str.length); // 输出 13

2、字符串连接:使用加号(+)将多个字符串连接成一个字符串。

const str1="Hello";
const str2="World";
const result=str1+", "+str2+"!";
console.log(result); // 输出 "Hello, World!"

3、字符串分割:使用.split()方法将字符串分割成数组,可以指定分隔符。

const str="red,green,blue";
const arr=str.split(",");
console.log(arr); // 输出 ["red", "green", "blue"]

4、字符串查找:使用.indexOf().lastIndexOf()方法查找字符串中的子串,返回子串在字符串中的位置,若未找到则返回-1。

const str="Hello, World!";
console.log(str.indexOf("World")); // 输出 7
console.log(str.lastIndexOf("l")); // 输出 10
console.log(str.indexOf("foo")); // 输出 -1

5、字符串替换:使用.replace()方法替换字符串中的子串。

const str="Hello, World!";
const newStr=str.replace("World", "John");
console.log(newStr); // 输出 "Hello, John!"

6、字符串大小写转换:使用.toLowerCase()将字符串转换为小写,使用.toUpperCase()将字符串转换为大写。

const str="Hello, World!";
console.log(str.toLowerCase()); // 输出 "hello, world!"
console.log(str.toUpperCase()); // 输出 "HELLO, WORLD!"

7、字符串截取:使用.slice()方法截取字符串的一部分,可以指定起始位置和结束位置。

const str="Hello, World!";
console.log(str.slice(0, 5)); // 输出 "Hello"
console.log(str.slice(7)); // 输出 "World!"

8、字符串去除空格:使用.trim()方法去除字符串两端的空格。

const str="  Hello, World!  ";
console.log(str.trim()); // 输出 "Hello, World!"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学不会只能哭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值