Javascript 搜索功能有问题 功能待办事项(id、任务、人员、截止日期){ this.id=id; this.task=任务; 这个。谁=谁; this.dueDate=dueDate; this.done=false; } //更多将todo对象添加到页面和阵列todo的代码 函数搜索(){ 对于(变量i=0;i
这是一个搜索函数,我试图将用户在搜索栏中键入的内容与我在代码前面创建的对象相匹配。它们必须匹配我给对象的“who”和“task”参数。所以一个对象是谁:简任务:做点什么,另一个是谁:斯科特任务:得到牛奶。问题是,在我的上一次提醒中,我只能匹配scott而不能匹配jane。斯科特是我最后加的一个。是否有某种方式需要修改循环或更改搜索条件 您的问题是在项目之间循环,但在循环之后使用Javascript 搜索功能有问题 功能待办事项(id、任务、人员、截止日期){ this.id=id; this.task=任务; 这个。谁=谁; this.dueDate=dueDate; this.done=false; } //更多将todo对象添加到页面和阵列todo的代码 函数搜索(){ 对于(变量i=0;i,javascript,regex,loops,match,Javascript,Regex,Loops,Match,这是一个搜索函数,我试图将用户在搜索栏中键入的内容与我在代码前面创建的对象相匹配。它们必须匹配我给对象的“who”和“task”参数。所以一个对象是谁:简任务:做点什么,另一个是谁:斯科特任务:得到牛奶。问题是,在我的上一次提醒中,我只能匹配scott而不能匹配jane。斯科特是我最后加的一个。是否有某种方式需要修改循环或更改搜索条件 您的问题是在项目之间循环,但在循环之后使用todoObj。因此todoObj将只保留数组中的最后一项。你需要重新组织一下……试试这样: function Todo
todoObj
。因此todoObj
将只保留数组中的最后一项。你需要重新组织一下……试试这样:
function Todo(id, task, who, dueDate) {
this.id = id;
this.task = task;
this.who = who;
this.dueDate = dueDate;
this.done = false;
}
// more code that adds the todo objects to the page and to the array todos
function search() {
for (var i = 0; i < todos.length; i++) {
var todoObj = todos[i];
console.log(todoObj.who); //shows both jane and scott
console.log(todoObj.task); // shows both do something and get milk
}
var searchTerm = document.getElementById("search").value;
searchTerm = searchTerm.trim();
var re = new RegExp(searchTerm, "ig");
var results = todoObj.who.match(re);
if (searchTerm == null || searchTerm == "") {
alert("Please enter a string to search for");
return;
} else {
alert(results);
}
}
函数搜索(){
var searchTerm=document.getElementById(“搜索”).value;
searchTerm=searchTerm.trim();
if(searchTerm==null | | searchTerm==“”){
警报(“请输入要搜索的字符串”);
返回;
}否则{
var todoObj=未定义,
结果=未定义,
re=新的RegExp(搜索术语,“ig”);
对于(变量i=0;i
下面是一个示例,它可以按照我认为您希望的方式工作:另外,创建一个新的RegExp可能在for循环之外,Ithink@albertoblaz是的,我注意到了。使用
新的RegExp
而不是/stuff/
的一个棘手的问题是循环很奇怪。如果我想声明一次,我想每次都必须在循环中设置lastIndex
属性。我正在查找并计划更新:)@albertoblaz事实上,我不确定新RegExp
和/stuff/
之间是否有如此大的区别,因为这是一个循环。无论如何,这个函数在匹配后立即返回的事实意味着它在这里并不重要。但我认为在其他情况下,如果他们在循环之前缓存正则表达式并重用每次迭代,则需要设置re.lastIndex=0代码>就在里面。再说一次,我think@Ian我也不确定。我想在循环中没有什么区别,因为/stuff/
只是创建正则表达式的字面方式。这与newarray()
vs[]
的情况相同。所以也许您也在为每个迭代创建一个新对象。不幸的是,我不知道…:(@albertoblaz完全正确。我不知道为什么我只把这个问题与new RegExp
联系起来……也许这只是巧合,我所看到的讨论的地方总是使用new RegExp
。我不知道,我正在试图重现我所说的问题,我甚至做不到这一点!
function search() {
var searchTerm = document.getElementById("search").value;
searchTerm = searchTerm.trim();
if (searchTerm == null || searchTerm == "") {
alert("Please enter a string to search for");
return;
} else {
var todoObj = undefined,
results = undefined,
re = new RegExp(searchTerm, "ig");
for (var i = 0; i < todos.length; i++) {
todoObj = todos[i];
results = todoObj.who.match(re);
if (results) {
alert("You found " + todoObj.who + ", who needs to " + todoObj.task + " by " + todoObj.dueDate);
return;
}
console.log(re.lastIndex);
}
alert("You didn't match anyone");
}
}