rex0220 項目検証プラグイン ユーザー選択間の重複チェック２

[項目検証プラグイン](https://qiita.com/rex0220/items/be20fd879f5e1bc9e035)で、複数ユーザー選択間の重複チェックを行ってみます。

# 概要

ユーザー選択1 とユーザー選択2 のそれぞれに、[項目検証プラグイン](https://qiita.com/rex0220/items/be20fd879f5e1bc9e035)のカスタムチェックを設定することで、重複チェックを行います。

- ユーザー選択1 とユーザー選択2 の重複チェック

![2024-12-12_13h19_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/d8d1c4e7-6d22-22b1-42f9-aafed3fa125c.png)

-  ユーザー選択1、ユーザー選択2 とユーザー選択3 の重複チェック

![2024-12-12_20h58_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/53104760-8adc-7820-f503-5cde3908783c.png)

# 操作例

- ユーザー選択1 とユーザー選択2 の重複チェック

![2024-12-12_13h34_36.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/3c896fa2-9412-ab91-57e8-f1d93e427241.gif)

-  ユーザー選択1、ユーザー選択2 とユーザー選択3 の重複チェック

![2024-12-12_20h59_44.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/32dc4afd-b778-c507-161b-779841f39ecb.gif)

# 項目検証プラグイン設定

## ユーザー選択1 とユーザー選択2 の重複チェック

ユーザー選択1 とユーザー選択2 のカスタムチェック・エラーメッセージは同じです。

- ユーザー選択1 とユーザー選択2 のカスタムチェック
    - ユーザー選択1 とユーザー選択2のユーザーコードを配列で取得して、積集合から重複チェック
- ユーザー選択1 とユーザー選択2 のエラーメッセージ
    - ユーザー選択1 とユーザー選択2のユーザー名を配列で取得して、積集合から重複名を表示


![2024-12-12_13h24_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/b04fe829-2622-ffff-1247-ce99772c664d.png)

- SEL_CODE(ユーザー選択, "array") ：ユーザー選択のユーザーコードを配列で取得
- SEL_NAME(ユーザー選択, "array") ：ユーザー選択のユーザー名を配列で取得
- INERSECT(配列1, 配列2) ：両方の配列に存在する値を配列で返す
    - INERSECT(ARRAY("user1","user2"), ARRAY("user2","user3")) -> ["user2"] 

```.js
// ユーザー選択1 USER_SELECT
 //* custom check-1:
ARRAY_COUNT(INTERSECT(
    SEL_CODE(ユーザー選択1,"array"),
    SEL_CODE(ユーザー選択2,"array")
))>0
 //* message ja:
"重複エラー: "&
JOIN(INTERSECT(
    SEL_NAME(ユーザー選択1,"array"),
    SEL_NAME(ユーザー選択2,"array")
),", ")

// ユーザー選択2 USER_SELECT
 //* custom check-1:
ARRAY_COUNT(INTERSECT(
    SEL_CODE(ユーザー選択1,"array"),
    SEL_CODE(ユーザー選択2,"array")
))>0
 //* message ja:
"重複エラー: "&
JOIN(INTERSECT(
    SEL_NAME(ユーザー選択1,"array"),
    SEL_NAME(ユーザー選択2,"array")
),", ")
```

## ユーザー選択1、ユーザー選択2 とユーザー選択3 の重複チェック

- ユーザー選択1は、ユーザー選択3 との重複チェック
- ユーザー選択2は、ユーザー選択3 との重複チェック
- ユーザー選択3は、ユーザー選択1,ユーザー選択2 との重複チェック

![2024-12-12_22h10_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/cd67fd7b-5d30-21d8-a31b-89fe85c84c74.png)

- DISTINCT(配列1, 配列2) ：配列の重複値を排除
    - DISTINCT(ARRAY("user1","user2"), ARRAY("user2","user3")) -> ["user1","user2","user3"] 

```.js
// ユーザー選択1 USER_SELECT
 //* custom check-1:
ARRAY_COUNT(INTERSECT(
    SEL_CODE(ユーザー選択1,"array"),
    SEL_CODE(ユーザー選択3,"array")
))>0
 //* message ja:
"重複エラー: "&
JOIN(INTERSECT(
    SEL_NAME(ユーザー選択1,"array"),
    SEL_NAME(ユーザー選択3,"array")
),", ")

// ユーザー選択2 USER_SELECT
 //* custom check-1:
ARRAY_COUNT(INTERSECT(
    SEL_CODE(ユーザー選択2,"array"),
    SEL_CODE(ユーザー選択3,"array")
))>0
 //* message ja:
"重複エラー: "&
JOIN(INTERSECT(
    SEL_NAME(ユーザー選択2,"array"),
    SEL_NAME(ユーザー選択3,"array")
),", ")

// ユーザー選択3 USER_SELECT
 //* custom check-1:
ARRAY_COUNT(INTERSECT(
    SEL_CODE(ユーザー選択3,"array"),
    DISTINCT(
       SEL_CODE(ユーザー選択1,"array"),
       SEL_CODE(ユーザー選択2,"array")
    )
))>0
 //* message ja:
"重複エラー: "&
JOIN(INTERSECT(
    SEL_NAME(ユーザー選択3,"array"),
    DISTINCT(
       SEL_NAME(ユーザー選択1,"array"),
       SEL_NAME(ユーザー選択2,"array")
    )
),", ")
```