.map の中で .filter をしたときの返り値を勘違いしていた

Javascript の 配列の中で特定の条件を満たす項目を削除した結果を返す関数 filter について。

JSON形式の配列については返り値が元々の配列の形から変わることが分かった。

この State に下記の項目があるものとする

const [itemRaws, setItemRaws] = useState([]);
itemRaws
{
[
 "name": "Tanaka",
"id": "0"
],
[
 "name": "Suzuki",
"id": "1"
],
[
 "name": "Sato",
"id": "2"
]
}

ここから、deleteTagIdRaw の中にある数字と同じ id の値を持った項目を削除する処理を

map と filter で行う

deleteTagIdRaw = {1}
let returnItemRaws = deleteTagIdRaw.map((deleteId, index) => {
            return(itemRaws.filter((cell, deleteIndex) => (cell.id!== deleteId)))
        })

returnItemRaws に返ってくる値は・・

returnItemRaws 予想
{
[
 “name”: “Tanaka”,
“id”: “0”
],
[
 “name”: “Sato”,
“id”: “2”
]
}

こうなると思っていたら、実際は

下記の形になっていた

returnItemRaws 実際
{
[
[
 "name": "Tanaka",
"id": "0"

]

[
 "name": "Sato",
"id": "2"
]
]
}

実際はひとつ下位の入れ子にまとめて入っている。

分かったこと

もし itemRaws に入っていた 項目をすべて参照したいときは、

 returnItemRaws[0].map((item, index) => {})

のように0個めを参照する必要がある。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA