「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > javascriptでvs配列を設定:いつ使用するのか?

javascriptでvs配列を設定:いつ使用するのか?

2025-02-19に投稿されました
ブラウズ:803

Set vs Array in JavaScript: When to Use Which?

JavaScriptは、セットを保存するための2つの強力なデータ構造を提供します: set および array 。どちらも複数の値を保存できますが、独自の機能により、さまざまなシナリオに適しています。一方がいつ、そしてなぜ他の人よりも選ばれるのかを探りましょう。

  1. デフォルトの一意の値

セットの最も顕著な特徴は、の自動処理です。

// 数组允许重复
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]
    要素チェックパフォーマンス
set

は、より速いルックアップ時間を提供して、要素が存在するかどうかを確認します。

const largearray = array.from({length:1000000}、(_、i)=> i); const largeset = new set(largearray); //配列検索 console.time( '配列constary'); console.log(largearray.includes(999999)); Console.TimeEnd( 'Array include'); //検索を設定します console.time( 'set has'); console.log(largeset.has(999999)); console.timeend( 'set has'); //内部的にハッシュテーブルを使用するため、セットは明らかに高速です
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 明显更快,因为它内部使用哈希表
    利用可能な方法と操作
array

は、データ操作のためのより組み込みの方法を提供し、 set は一意性管理に焦点を当てています。

// arrayメソッド 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); //メソッドを設定します const set = new set([1、2、3、4、5]); set.add(6); set.delete(6); set.has(5); set.clear(); //すべての値
// 数组方法
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();                   // 删除所有值
    シーケンスとインデックスアクセス
array

は挿入順序を維持し、インデックスベースのアクセスを提供し、 set は挿入順序のみを維持します。

//配列インデックスアクセス const arr = ['a'、 'b'、 'c']; console.log(arr [0]); console.log(arr [1]); arr [1] = 'x'; //セットにはインデックスアクセスがありません const set = new set(['a'、 'b'、 'c']); console.log([... set] [0]); //インデックスの直接修正
// 数组索引访问
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]); // 需要先转换为数组
// 不允许直接修改索引
    メモリ使用
set

は通常、 array よりも多くのメモリを使用しますが、より速いルックアップを提供します。

//メモリ比較(ラフな例) const numbers = array.from({length:1000}、(_、i)=> i); //配列メモリ const arr = [... numbers]; console.log(process.memoryusage()。盛り上げ); //メモリを設定します const set = new set(numbers); console.log(process.memoryusage()。盛り上げ); //ハッシュテーブル構造により、セットは通常、より多くのメモリを使用します
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. アレイを使用する時期:

// 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'、 'yes'、 'no']; const yesvotes = hotes.filter(hote => hote === 'yes')。長さ;
// 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 uiniquevisitors = new set(); function logvisitor(userid){ Uniquevisitors.add(userid); console.log( `合計ユニーク訪問者:$ {uniquevisitors.size}`); } // 2。迅速な検索操作に使用されます const aladusers = new set(['user1'、 'user2'、 'user3']); 関数checkaccess(userid){ return apposusers.has(userid); } //3。複製を削除するために使用されます 関数getuniquehashtags(posts){ const uiniquetags = new set(); posts.foreach(post => { post.hashtags.foreach(tag => uniquetags.add(tag)); }); return [... uniquetags]; }
// 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)];
以下が必要な場合は、

select

array

インデックスベースのアクセス
  • 広範な配列メソッド(マップ、削減、フィルターなど)
  • 繰り返し値
  • メモリ効率
  • 従来の反復モデル
  • 次の状況が必要な場合は
を設定します。

一意の値

のみ
    クイック検索操作
  • 単純な追加/削除操作
  • 一意のアイテムのリストを保持します
  • QuickEduplication
  • いつでも2つのタイプ間を変換できることを忘れないでください。したがって、現在のニーズに最適なタイプを選択してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3