JavaScriptは、セットを保存するための2つの強力なデータ構造を提供します: set
および array
。どちらも複数の値を保存できますが、独自の機能により、さまざまなシナリオに適しています。一方がいつ、そしてなぜ他の人よりも選ばれるのかを探りましょう。
セットの最も顕著な特徴は、
の自動処理です。
// 数组允许重复
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]
は、より速いルックアップ時間を提供して、要素が存在するかどうかを確認します。
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 明显更快,因为它内部使用哈希表
は、データ操作のためのより組み込みの方法を提供し、 set
は一意性管理に焦点を当てています。
// 数组方法
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(); // 删除所有值
は挿入順序を維持し、インデックスベースのアクセスを提供し、 set
は挿入順序のみを維持します。
// 数组索引访问
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]); // 需要先转换为数组
// 不允许直接修改索引
は通常、 array
よりも多くのメモリを使用しますが、より速いルックアップを提供します。
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 明显更快,因为它内部使用哈希表
// 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;
// 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];
}
とを簡単に変換できます。
//設定する配列
const arr = [1、2、2、3、3、4];
const set = new set(arr);
//配列に設定-3つの方法
const back1 = [... set];
const back2 = array.from(set);
const back3 = array.from(set.values());
//アレイ重複排除に使用されます
const dedicated = [... new set(arr)];
// 数组到 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)];
以下が必要な場合は、:
一意の値
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3