0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【JavaScript】連想配列を使うくらいならMapやSetを使う

Last updated at Posted at 2020-02-02

概要

  • Vuforiaに触れる機会があって、久々にJSを弄り回していたら、かつて不便だった箇所が便利になっていたのでメモる
  • サンプルは動作を見せる為に【jsfiddle】というサイトに書いたのでリンクを貼っておく

不便だったやつ

  • Key-Value型のデータを持つときに連想配列を使っていたが…
    • 不純物入りオブジェクトをfor (~ in ~)で展開しようとして数が合わなくて、Object.keys(連想配列)とかしないといけないとか
    • 実は純粋な配列ではないらしくてfor (~ of ~) 使えないとか
    • lengthを取ったら、長さ0で衝撃を受けたとか
  • データが重複をしない配列が欲しい時に、連想配列のKeyを駆使するか、ただの配列から重複を取り除く処理をしていた(重複データを持っていないとダメな場合は、素直にfilterとかで弾くしかないと思うけど…)

リファレンス

サンプル

Key-Value型データの保持にMapを使う(jsfiddleへ

let datas = new Map();
for (let i = 0; i < 3; i++) {
  let key = 'key' + i;
  let data = {
    name: 'name' + i,
    value: 'value' + i
  }
  datas.set(key, data);
}

// ----- 出力例 -----
// entities()は、Key-Valueを配列で返してくれる。
console.log('★entries()で出力');
for (let [k, v] of datas.entries()) {
  console.log(k + ' = ' + JSON.stringify(v));
}

// keys()は、Keyだけの配列を介してくれる
console.log('★keys()で出力');
for (let k of datas.keys()) {
  console.log(k + ' = ' + JSON.stringify(datas.get(k)));
}

// values()は、valueだけの配列を介してくれる。Keyは取れない
console.log('★values()で出力');
for (let v of datas.values()) {
  console.log(JSON.stringify(v));
}

重複しないデータの保持にSetを使う(jsfiddleへ

let dataSet = new Set();
dataSet.add('hoge');
dataSet.add('fuga');
dataSet.add('hoge');

// ----- 出力 -----
console.log('★forEach()で出力')
dataSet.forEach(k => {
  console.log(k);
});

console.log('★for (~ of ~)で出力')
for (let k of dataSet) {
  console.log(k);
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?