HTMLがあるとこちらも動作確認できます。
公開するのが難しい場合、スクリーンショットや画面イメージ(四角や丸だけのもの)を添付してもらえると回答側にとってイメージしやすくなります。
今はざっくり、こういうテーブルがある認識です。
id | comment | 状態 | 削除 |
---|---|---|---|
1 | タスク | [作業中] | [削除] |
2 | タスク | [完了] | [削除] |
また、ラジオボタンの「作業中」「完了」「全部」のどれかが必ず付いていると考えています。
上記の前提で話しますが、間違っていたら訂正お願いします。
まず、!
を使用してフィルタリングしたいとのことですが、残念ながら下記の書き方は間違っています。
Uncaught TypeError: task.id is not a function
のエラーが出てくるはずです。
const resultdelete = tasks.filter((task) => !task.id(/task.id/));
!
とtask.id
を使用した書き方はこちらです。
const resultdelete = tasks.filter((task) => !task.id);
理由はエラー文通り、task.idはnumber
でありfunction
ではないため、id()
のような書き方ができません。
日本語にすると、「tasks
の中からid
が存在しないタスクを抽出する」ことになります。
質問者様の意図とは別物です。
!を使用すれば配列の特定の要素をスキップできると拝見した
おそらくご参考にされたコードではそういう使い方かと思いますが、!
(論理否定演算子)自身の意味はそれではありません。
一度調べてみた方がいいでしょう。
そもそも、削除ボタンが押された後に、tasks
のタスクに対しての操作がありません。
何もしていなくて、再度フィルタリングを掛けただけなので、画面に変化が出ません。
フィルタリングに!
を使いたいのをこだわらなければ、他の方法をおすすめします。
例えばtask.status
に"作業中"
と"完了"
しか存在しませんが、そこに「削除された」と等しい状態を追加するとか。
(本当は日本語の文字列ではなく、numberやenumがいいです。。。)
その後は、作業中でフィルタリングすればいいです。
ラジオボタン「作業中」が選択された際の実装と同じでいいです。
deletebutton.addEventListener("click", () => {
// 削除ボタンが押されたら状態変更
+ task.status = "削除"; // 日本語じゃない方がいい
if (radiowork.checked) {
// このままで合っているのでアンコメント
- // const result = tasks.filter((task) => task.status === "作業中");
+ const result = tasks.filter((task) => task.status === "作業中");
showTaskList(result);
- const resultdelete = tasks.filter((task) => !task.id(/task.id/));
- showTaskList(resultdelete);
- console.log("作業中削除後", resulttasks);
+ console.log("作業中削除後", result); // 定義されていないresulttasksではなくresultを出力
- console.log("作業中の削除タスク", resultdelete);
} else if (radiocomplete.checked) {
} else if (radioall.checked) {
}
});
変更を加えたい時は、task
に変更を加えて、
あとは通常通りにフィルタリングすれば問題ないかと思います。
これはcreateStatusButton
の方にも当てはまります。
最後に、他の回答者様の意見に関連するものになりますが、
宣言する際に、const
が使えるなら使いましょう。let
、ましてやvar
に変更するメリットはありません。
今のままで大丈夫です。