JavaScript는 컬렉션 저장을 위한 두 가지 강력한 데이터 구조인 Set
및 Array
를 제공합니다. 둘 다 여러 값을 저장할 수 있지만 고유한 특성으로 인해 다양한 시나리오에 더 적합합니다. 언제, 왜 다른 것을 선택해야 하는지 살펴보겠습니다.
Set
가장 눈에 띄는 기능은 중복 자동 처리입니다.
<code class="language-javascript">// 数组允许重复 const arr = [1, 2, 2, 3, 3, 4]; console.log(arr); // [1, 2, 2, 3, 3, 4] // Set 自动删除重复项 const set = new Set([1, 2, 2, 3, 3, 4]); console.log([...set]); // [1, 2, 3, 4] // 使用 Set 从数组中删除重复项 const uniqueArray = [...new Set(arr)]; console.log(uniqueArray); // [1, 2, 3, 4]</code>
Set
은 요소가 존재하는지 확인하는 데 더 빠른 조회 시간을 제공합니다.
<code class="language-javascript">const largeArray = Array.from({ length: 1000000 }, (_, i) => i); const largeSet = new Set(largeArray); // 数组查找 console.time('Array includes'); console.log(largeArray.includes(999999)); console.timeEnd('Array includes'); // Set 查找 console.time('Set has'); console.log(largeSet.has(999999)); console.timeEnd('Set has'); // Set 明显更快,因为它内部使用哈希表</code>
Array
은 데이터 조작을 위한 더 많은 기본 제공 방법을 제공하는 반면, Set
는 고유성 관리에 중점을 둡니다.
<code class="language-javascript">// 数组方法 const arr = [1, 2, 3, 4, 5]; arr.push(6); // 添加到末尾 arr.pop(); // 从末尾移除 arr.unshift(0); // 添加到开头 arr.shift(); // 从开头移除 arr.splice(2, 1, 'new'); // 替换元素 arr.slice(1, 3); // 提取部分 arr.map(x => x * 2); // 转换元素 arr.filter(x => x > 2); // 过滤元素 arr.reduce((a, b) => a + b); // 归约为单个值 // Set 方法 const set = new Set([1, 2, 3, 4, 5]); set.add(6); // 添加值 set.delete(6); // 删除值 set.has(5); // 检查是否存在 set.clear(); // 删除所有值</code>
Array
은 삽입 순서를 유지하고 인덱스 기반 액세스를 제공하는 반면, Set
는 삽입 순서만 유지합니다.
<code class="language-javascript">// 数组索引访问 const arr = ['a', 'b', 'c']; console.log(arr[0]); // 'a' console.log(arr[1]); // 'b' arr[1] = 'x'; // 直接修改 // Set 没有索引访问 const set = new Set(['a', 'b', 'c']); console.log([...set][0]); // 需要先转换为数组 // 不允许直接修改索引</code>
Set
은 일반적으로 Array
보다 더 많은 메모리를 사용하지만 더 빠른 조회를 제공합니다.
<code class="language-javascript">// 内存比较(粗略示例) const numbers = Array.from({ length: 1000 }, (_, i) => i); // 数组内存 const arr = [...numbers]; console.log(process.memoryUsage().heapUsed); // Set 内存 const set = new Set(numbers); console.log(process.memoryUsage().heapUsed); // 由于哈希表结构,Set 通常使用更多内存</code>
<code class="language-javascript">// 1. 当顺序和索引访问很重要时 const playlist = ['song1.mp3', 'song2.mp3', 'song3.mp3']; const currentTrack = playlist[currentIndex]; // 2. 当您需要数组方法时 const numbers = [1, 2, 3, 4, 5]; const doubled = numbers.map(x => x * 2); const sum = numbers.reduce((a, b) => a + b, 0); // 3. 当重复值可以接受或需要时 const votes = ['yes', 'no', 'yes', 'yes', 'no']; const yesVotes = votes.filter(vote => vote === 'yes').length;</code>
<code class="language-javascript">// 1. 当跟踪唯一值时 const uniqueVisitors = new Set(); function logVisitor(userId) { uniqueVisitors.add(userId); console.log(`Total unique visitors: ${uniqueVisitors.size}`); } // 2. 用于快速查找操作 const allowedUsers = new Set(['user1', 'user2', 'user3']); function checkAccess(userId) { return allowedUsers.has(userId); } // 3. 用于删除重复项 function getUniqueHashtags(posts) { const uniqueTags = new Set(); posts.forEach(post => { post.hashtags.forEach(tag => uniqueTags.add(tag)); }); return [...uniqueTags]; }</code>
필요에 따라 Set
과 Array
사이를 쉽게 전환할 수 있습니다.
<code class="language-javascript">// 数组到 Set const arr = [1, 2, 2, 3, 3, 4]; const set = new Set(arr); // Set 到数组 - 三种方法 const back1 = [...set]; const back2 = Array.from(set); const back3 = Array.from(set.values()); // 用于数组去重 const deduped = [...new Set(arr)];</code>
필요할 때 Array
선택:
필요할 때 Set
선택:
언제든지 두 가지 유형 간에 전환할 수 있으므로 현재 요구사항에 가장 적합한 유형을 선택하세요.
위 내용은 JavaScript의 설정과 배열: 언제 어느 것을 사용해야 할까요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!