==== 追記 ====
こちらの回答はVercleneさんのご指摘の通り、今回の質問のケースに当てはまりませんでした。
見当違いの回答になってしまい申し訳ございません。
= = = = = = = = =
task
はオブジェクトです。
オブジェクトの比較は===
(!==
)でできません。
const resultdelete = tasks.filter((aaa) => aaa !== task);
下記のように、中身が同じ値でも、taskA
とtaskB
は別物なのでfalse
になります。
const taskA = {
id: 1,
comment: "comment",
status: "作業中",
};
const taskB = {
id: 1,
comment: "comment",
status: "作業中",
};
console.log(taskA === taskB); // => false
オブジェクト比較の一例
もっと詳しくはこちら
なので、配列へのfilterの掛け方が問題ではなく、
filterの中で行なっているオブジェクトの比較が問題です。
今回の場合、id
のようなオブジェクトの一意性を担保できるプロパティがあると、「id
が同じなら同じタスク」と考えることができます。
const resultdelete = tasks.filter((aaa) => aaa.id !== task.id);
オブジェクトの全項目で比較したい時は、専用の関数をあらかじめ作成する手もあります。
先ほどのtaskA
とtaskB
をisSameTask
関数で比較すると、true
という結果になります。
const isSameTask = (taskA, taskB) => {
// 項目ごとで値をチェックして、異なる値だったらfalse
if (taskA.id !== taskB.id) return false;
if (taskA.comment !== taskB.comment) return false;
if (taskA.status !== taskB.status) return false;
// 最後までreturnされていなかったらtrue
return true;
}
console.log(isSameTask(taskA, taskB)); // => true
const resultdelete = tasks.filter((aaa) => !isSameTask(aaa, task));
最後に、色々試している途中だからだと思いますが、生存期間が短い変数とは言え、aaa
という命名はよろしくないです。。。