👌

ES2024追加予定機能の中でよく使いそうなもの抜粋(私的)

2024/02/25に公開

Promise.withResolvers

Promise.withResolversは、Promiseをより柔軟に制御するための新しいメソッド。

Promiseresolverejectの関数を直接取得できるため、外部のスコープからPromiseを解決または拒否できる。

(非同期のテストとかで活躍しそう?)

const { promise, resolve, reject } = Promise.withResolvers();

// Promiseの結果に応じた処理を設定
promise.then(
  (result) => {
    console.log(`成功: ${result}`);
  },
  (error) => {
    console.error(`失敗: ${error.message}`);
  }
);

// 条件に応じてPromiseを解決または拒否する

// 成功
resolve('ok!');

// 失敗
reject(new Error('error!'));

Object.groupBy

Object.groupByは、オブジェクト内の要素を特定の基準に基づいてグループ化するメソッド。
データの集計や整理を簡単に行うことができそう。

people配列内のオブジェクトをageプロパティに基づいてグループ化して、同じ年齢の人々が同じグループにまとまる。

(なんとなく、よくあるフィルター機能とかで使えそう?)

const people = [
  { name: "Alice", age: 30 },
  { name: "Bob", age: 25 },
  { name: "Charlie", age: 30 },
  { name: "David", age: 25 },
  { name: "Eve", age: 35 }
];

const groupedByAge = Object.groupBy(people, person => person.age);

console.log(groupedByAge);

上記のconsole結果

{
  "25": [{
      "name": "Bob",
      "age": 25
    },
    {
      "name": "David",
      "age": 25
    }
  ],
  "30": [{
      "name": "Alice",
      "age": 30
    },
    {
      "name": "Charlie",
      "age": 30
    }
  ],
  "35": [{
    "name": "Eve",
    "age": 35
  }]
}

Map.groupBy

Map.groupByは、Mapオブジェクト内の要素を特定の基準に基づいてグループ化するメソッド。
Object.groupByに似ているが、Mapオブジェクトに適用される。

Mapオブジェクト内のエントリをageプロパティに基づいてグループ化。

const people = new Map([
  [1, { name: "Alice", age: 30 }],
  [2, { name: "Bob", age: 25 }],
  [3, { name: "Charlie", age: 30 }],
  [4, { name: "David", age: 25 }],
  [5, { name: "Eve", age: 35 }]
]);

const groupedByAge = Map.groupBy(people, ([key, person]) => person.age);

console.log(groupedByAge);

上記のconsole結果

new Map([
  [
    30,
    [
      [
        1,
        {
          "name": "Alice",
          "age": 30
        }
      ],
      [
        3,
        {
          "name": "Charlie",
          "age": 30
        }
      ]
    ]
  ],
  [
    25,
    [
      [
        2,
        {
          "name": "Bob",
          "age": 25
        }
      ],
      [
        4,
        {
          "name": "David",
          "age": 25
        }
      ]
    ]
  ],
  [
    35,
    [
      [
        5,
        {
          "name": "Eve",
          "age": 35
        }
      ]
    ]
  ]
])

参考資料

Discussion