我正在遍历表中的项目列表,并有一个搜索字段。我正在搜索的项目具有许多非常相似的值(票号):indexOf
在大多数情况下都有效,但在某些情况下,它会返回多个结果。
如果您正在搜索特定的票证编号,则仅应返回带有所搜索的票证值的<tr>
。在下面,query
是搜索值。如果等于-1,则跳过该值。然后执行检查,以使continue
移至已过滤的结果,并将其呈现出来。
for (var i in data){
var ticket = data[i].ticket.indexOf(query) === -1;
if (ticket)
continue;
else {
filtered_data.push(data[i]);
}
}
一个例子:我搜索ABC002465179
,它将返回以下内容:
[ABC002465179
ABC002480483
,ABC002480487
,ABC002480494
和ABC002480265
我也喜欢match
方法,但是看到的结果相同。
对我在这里俯瞰的一切有见识吗?
为每个评论者创建一个jsfiddle:https://jsfiddle.net/7zrknwga/3/
尝试在此处进行复制,因此我应该设置1个结果。
UPDATE:能够弄清楚。正如@KaeyangTheG所说,filtered_data还有其他事情。过滤器中的另一列(parent_ticket)具有null
的能力:对此进行了检查,但是当我移动逻辑以同时检查indexOf件和null
方面时(使用&&
) ,它能够过滤正确的结果。
因此问题绝不是针对ticket
的indexOf检查,而是针对parent_ticket
的检查,因为可能存在空值。 ticket
从不null
[如果只想知道要查询的票证存在于数据数组中,则可以简单地迭代该数组,并将票证字段与query
字符串进行比较。
// isFound is for tracking the ticket if it exist or not and indexOfTicket is for tracking its index.
let isFound = false;
let indexOfTicket = -1;
data.map((item, index)=>{
if(item.ticket == query){
isFound = true;
indexOfTicket = index;
}
})
if(isFound){
console.log("Ticket "+data[indexOfTicket]+" is at "+(indexOfTicket)+' position');
}else {
console.log("Not Found");
}