javascript - grep() 和 indexOf() 函数在字符串数组中不起作用
问题描述
我正在创建一个待办事项应用程序。我已将所有任务存储在 localStorage 中。当需要删除任务时,我想从 localStorage 获取数组中的任务,删除特定任务并再次将新数组存储到 localstorage。
但是 indexOf() 函数总是为需要删除的任务返回 -1 并且 grep() 方法都不会删除该任务。
实际上这些方法并没有在数组中找到任务,但它就在那里,我不知道为什么会这样??
这是我的代码
$(document).ready(function () {
$("#todoText").focus();
colors = ["red", "lightgreen", "yellow", "green", "cyan"];
colorIndex = 0;
//如果任务已经存在则显示
if (localStorage.getItem("todos")) {
todos = JSON.parse(localStorage.getItem("todos"));
todos.forEach(todo => {
$("#todoList").append(
"<div class='task magenta " + colors[colorIndex] + "' data-id='task'>" +
"<div class='task-text'>" + todo + " </div >" +
"<div class='btn'>" +
"<button class='compTask'><i class='far fa-check-circle'></i></button> " +
"<button class='delTask'><i class='far fa-trash-alt'></i></button> " +
"</div> " +
"</div > "
);
colorIndex++;
if (colorIndex >= 5) {
colorIndex = 0;
}
});
}
//添加新任务
$("#todoForm").submit(function (e) {
e.preventDefault();
text = $("#todoText").val();
$("#todoText").val("");
if (!text || /^\s*$/.test(text)) {
return;
}
const task = "<div class='task magenta " + colors[colorIndex] + "' data-id='task'>" +
"<div class='task-text'>" + text + " </div >" +
"<div class='btn'>" +
"<button class='compTask'><i class='far fa-check-circle'></i></button> " +
"<button class='delTask'><i class='far fa-trash-alt'></i></button> " +
"</div> " +
"</div > ";
colorIndex++;
if (colorIndex >= 5) {
colorIndex = 0;
}
$("#todoList").append(task);
var todos;
if (localStorage.getItem("todos") === null) {
todos = [];
} else {
todos = JSON.parse(localStorage.getItem("todos"));
}
todos.push(text);
//set to localstorage
localStorage.setItem("todos", JSON.stringify(todos));
});
//完成任务
$(document).on("click", ".compTask", function (e) {
$(this).parent().parent().toggleClass("complete");
var btnClass = "";
if ($(this).children("i").hasClass("far")) {
$(this).children("i").removeClass("far");
$(this).children("i").addClass("fas");
btnClass = "fas";
} else {
$(this).children("i").removeClass("fas");
$(this).children("i").addClass("far");
btnClass = "far";
}
});
//删除任务
//这里是实际问题
$(document).on("click", ".delTask", function (e) {
var todos;
if (localStorage.getItem("todos") === null) {
todos = [];
} else {
todos = JSON.parse(localStorage.getItem("todos"));
}
const deleteText = $(this).parent().parent().children(".task-text").text();
todos = todos.splice(todos.indexOf(deleteText), 1);
/* todos = $.grep(todos, function(item){
return item != deleteText;
}); */
todos = todos.filter()
console.log(todos);
localStorage.setItem("todos", JSON.stringify(todos));
$(this).parent().parent().animate({
height: 0,
padding: 0,
width: 0
}, 700, () => {
$(this).parent().parent().remove();
});
});
});
当我todos.indexOf("Breakfast")
在浏览器控制台中进行操作时很好,但是从我的程序中它给出了-1;
A之后todos
看起来像["Wake up early", "Breakfast", "Study", "Game", "Lunch"]
这样JSON.parse(localStorage("todos"))
HTML 代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vanilla Todo</title>
<script src="https://kit.fontawesome.com/0552b63fc2.js" crossorigin="anonymous"></script>
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400&display=swap" rel="stylesheet">
<link rel="stylesheet" href="css/style.css">
<script src="https://code.jquery.com/jquery-3.5.1.js"
integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=" crossorigin="anonymous"></script>
<script src="js/main.js"></script>
</head>
<body>
<div class="todo-container">
<div class="todo">
<div class="todo-title">TODO</div>
<div class="todo-form">
<p>What's the task ??</p>
<form id="todoForm">
<input type="text" class="todo-text" id="todoText" placeholder="Add task...">
<button class="add-btn" id="add"><i class="fas fa-plus"></i></button>
</form>
</div>
<div class="todo-list" id="todoList"></div>
</div>
</div>
</body>
</html>
解决方案
推荐阅读
- python - 解析之前有标签的所有元素
- ios - 如何在 SwiftUI 中结合可折叠行使用 List 自定义行内部内容?
- javascript - 在 GraphQL 查询中分组后如何限制和跳过标签列表页面的分页?
- powerbi - 如何在 PBI 的计算列公式中使用度量
- java - 将 x 轴标签与 MpAndroidChart 中的 Bars 对齐 Android 中的 BarChart
- ios - 无法在 react-native 中从 Objective-c 调用 swift 函数
- python - 如何将 ID 附加到导入和 numpy 数组转换的图像?
- node.js - 处理节点功能应用程序的超时
- javascript - 如何在单击时创建数组数组并通过数据属性检查数组是否存在于数组中并推送到该数组
- linux - Linux 主机上的 Docker 注册表用于存储(而不是运行!)基于 Windows 的图像