首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js set size

基础概念

Set 是 JavaScript 中的一种数据结构,类似于数组,但其成员的值都是唯一的,没有重复的值。Set 对象保存值的唯一性是通过使用其内部算法,在添加新元素时比较它们来实现的。

相关优势

  1. 唯一性:自动去除重复项。
  2. 简洁性:使用方便,语法简洁。
  3. 性能:在查找、删除特定值时比数组更高效。

类型

  • 基本类型:如数字、字符串、布尔值等。
  • 对象引用:可以存储对象的引用,但不会进行深度比较,所以不同的对象实例即使内容相同也会被视为不同的元素。

应用场景

  • 去重:快速去除数组中的重复元素。
  • 集合运算:如并集、交集、差集等。
  • 数据缓存:存储一些不重复的数据作为缓存。

示例代码

代码语言:txt
复制
// 创建一个 Set
let mySet = new Set();

// 添加元素
mySet.add(1); // Set { 1 }
mySet.add(2); // Set { 1, 2 }
mySet.add(1); // 重复的值不会被添加,结果仍然是 Set { 1, 2 }

// 获取 Set 的大小
console.log(mySet.size); // 输出:2

// 遍历 Set
for (let item of mySet) {
  console.log(item);
}
// 输出:
// 1
// 2

// 删除元素
mySet.delete(1);
console.log(mySet.size); // 输出:1

可能遇到的问题及解决方法

问题:为什么 Setsize 属性有时候不准确?

原因:这种情况通常发生在并发修改 Set 的情况下,比如在一个循环中同时读取和修改 Set

解决方法

  • 确保在读取 size 属性时,不会有其他操作修改 Set
  • 使用函数式编程的方法,如 Array.from(set) 转换为数组后再进行操作,这样可以避免直接在迭代过程中修改原 Set
代码语言:txt
复制
let mySet = new Set([1, 2, 3, 4, 5]);

// 错误的做法:在遍历时修改 Set
for (let i = 0; i < mySet.size; i++) {
  mySet.delete(i); // 这会导致 size 在迭代过程中变化,可能出现意外结果
}

// 正确的做法:先转换为数组处理
let array = Array.from(mySet);
array.forEach(value => {
  if (value % 2 === 0) {
    mySet.delete(value);
  }
});

通过上述方法,可以有效避免在并发操作中出现的 size 不准确的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • js中Set基本使用

    ECMAScript 6 新增的 Set 是一种新集合类型,为这门语言带来集合数据结构。Set 在很多方面都像是加强的 Map,这是因为它们的大多数 API 和行为都是共有的。 基本API 1....创建Set实例 使用 new 关键字和 Set 构造函数可以创建一个空集合: const s = new Set(); 如果想在创建的同时初始化实例,则可以给 Set 构造函数传入一个可迭代对象,其中需要包含插入到新集合实例中的元素...(Set 可以包含任何 JavaScript 数据类型作为值): const s = new Set(["val1", 1, true, {}, undefined, function fun() {}...Set实例转数组 const s = new Set([1, 2, 3]); Array.from(s); // [1, 2, 3] 3. size属性 size: 获取Set实例的元素个数: const...s = new Set([1, 2, 3]); s.size; // 3 4. add() add(): 添加元素: const s = new Set(); s.add(1).add(2).add(

    2.6K30

    js中set和map的区别_list和set

    Map的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算。 Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。...Map对象的属性: size:返回Map对象中所包含的键值对个数 Map对象的方法: set(key, val): 向Map中添加新元素 get(key): 通过键值查找特定的数值并返回 has(key...Set Set 对象允许你存储任何类型的值,无论是原始值或者是对象引用。它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set 本身是一个构造函数,用来生成Set 数据结构。...{} {} 两个空对象的指针不一样,所以会重复 Set实例对象的属性: size:返回Set实例的成员总数。...('c').add({ 'a': 1}) console.log(mySet) // {'a', 'b', 11, 22, 'c', {a: 1}} console.log(mySet.size) /

    3.1K20

    测试vector、list、set调用empty和size的耗时是否为常数

    在阅读代码时,发现有使用size()==0判断是否容器为空的,而从>上看到size()不能保证常数时间,建议使用empty()替换。.../**     测试vector、list、set调用empty和size的耗时是否为常数,     结论:empty()的调用时间都是常数,list的size()的调用时间非常数     使用建议:判断成员是否为空时使用...cost time(ms):0             test set.size():             cost time(ms):0             ----------------...cost time(ms):0             test set.size():             cost time(ms):0             ----------------... set.size():" << endl;     COST_TIME_START         s.size();     COST_TIME_END     cout << "

    37030

    JS 中的 (Weak)Set 和 (Weak)Map

    (s1)/* Set(6) {NaN, undefined, null, 0, Infinity, …} size: 6 __proto__: Set [[Entries]]:...,Set.prototype上还有一个size属性,它返回Set对象值的个数。...它和 JS 对象不同,JS 对象只能用字符串和Symbol作为键,而Map可以使用任何值。 除了键类型上的不同,它和Object还有以下不同: Map中的键值是有序的,而添加到对象中的键则不是。...Map可以通过size获取键值对个数,而Object的键值对个数只能手动计算。 Map可直接进行迭代,而 Object 的迭代需要先获取它的键数组,然后再进行迭代。...var merged = new Map([...first, ...second]); Map 的原型属性 除了constructor,Map原型上还有一个size属性,它返回Map对象键值对的数量。

    2.1K20

    讲解string size must be a multiple of element size

    讲解 "string size must be a multiple of element size" 错误在编程过程中,尤其是在使用一些底层编程语言或库时,您可能会遇到各种错误消息。...其中之一是 "string size must be a multiple of element size"。本篇博客文章将向您解释这个错误消息的含义,并给出解决方案。...错误解读当您看到 "string size must be a multiple of element size" 错误消息时,它实际上是在指示字符串(string)的大小必须是元素大小的倍数。...解决方案以下是几种可能的解决方案,帮助您解决 "string size must be a multiple of element size" 错误。1....数据类型匹配另一个可能导致 "string size must be a multiple of element size" 错误的原因是数据类型不匹配。

    23910

    js入门(ES6)---认识Symbol、Map、 Set

    认识Symbol、Map、 Set、Proxy Symbol 用法 方法 Symbol.for() Symbol.keyFor() 使用场景 Map 用法 添加/删除 迭代 合并Map Set...; Map 保存键值对 二维数组,查找速度快 用法 let myMap = new Map(); value可以为字符串,对象,函数,NAN,整型等(任何值或对象) 添加/删除 添加 myMap.set...'one2']]); 合并他俩 var third = new Map([...first, ...second]); 或者 var third = new Map(first,second]); Set...删除 mySet.delete(2); 删除或者添加可以处理数据 var a = [1, 2, 3]; var data = new Set([...a].filter(x => x%2==0));...后续会推出 每个平台的详细搭建过程 前端:js入门 vue入门 vue开发小程序 等 后端: java入门 springboot入门等 服务器:mysql入门 服务器简单指令 云服务器运行项目

    1.7K30

    系统软件工程师必备技能-进程内存的working set size(WSS)测量

    How To Measure the Working Set Size on Linux|来源:内核月谈 概述 本文主要摘自brendangregg大神的blog: http://www.brendangregg.com.../blog/2018-01-17/measure-working-set-size.html 研究如何衡量一个特定业务程序的working set size。...举个例子来说,某些后台daemon为了性能,喜欢在程序在启动阶段就创建好各种fixed-size的内存池,且不支持动态grow/shrink,这些内存池的真实利用率如何?是否存在浪费?访问频率如何?...正文 Working Set Size(WSS)是指一个app保持正常运行所须的内存。比如一个应用在初始阶段申请了100G主存,在实际正常运行时每秒只需要50M,那么这里的50M就是一个WSS。...Wait until the workload accesses its working set.

    4.1K10
    领券