【发布时间】:2016-10-12 03:40:26
【问题描述】:
我正在使用 JS 和 jQuery 编写搜索引擎,而不是生成我的 PHP 数据库,但我在理解如何构造“查询”时遇到问题。
目前,填充对象数组的步骤如下。
1) PHP 后端开发一个 JSON 文件,其中包含特定数据库中的所有假期。
2) Javascript 前端提取此 JSON 并通过循环将其全部添加到数组中。
3) 用户有几个框,他们可以在其中搜索数组,并将所有结果添加到“结果”数组中,该数组每次都会相应更新。
我遇到的一个问题是;如何处理多个 if 子句? 例如,如果 search_time 和 search_state != "all",我需要将搜索范围缩小到仅包括满足 search_time AND search_state 值的对象。目前,查询是 OR 查询。
我来自 SQL 背景,所以像搜索一样接近 Javascript 对我来说有点不同,我们将不胜感激。
下面的Javascript搜索:
for (var i=0; (i <= holidays.length) && (found < limit); i++) {
var h = holidays[i];
console.log(h);
complete = false;
while (!complete && (h != undefined)) {
if (search_terms != "" && search_terms != undefined) {
if (like(h.title, search_terms) || like(h.state, search_terms) || like(h.country, search_terms) || like(h.location, search_terms)) {
results[found] = h;
found += 1;
complete = true;
}
}
if (search_country != "all") {
if (h.country != undefined) {
if (like(h.country, "Australia") && !complete) {
results[found] = h;
found += 1;
complete = true;
}
}
}
if (search_state != "ALL") {
if (like(h.state, search_state) && !complete) {
results[found] = h;
found += 1;
complete = true;
}
}
if (search_time != "all") {
var cyear = new Date().getFullYear();
var nyear = cyear + 1;
if (search_time == 'n-year' && !complete) {
if (h.startsyd != undefined) {
if (new Date(h.startsyd).getFullYear() >= nyear) {
results[found] = h;
found += 1;
complete = true;
}
}
else if (h.melbstart != undefined) {
if (new Date(h.melbstart).getFullYear() >= nyear) {
results[found] = h;
found += 1;
complete = true;
}
}
}
else if (search_time == 'c-year' && !complete) {
if (h.startsyd != undefined) {
if (new Date(h.startsyd).getFullYear() >= cyear && new Date(h.startsyd).getFullYear() < nyear) {
results[found] = h;
found += 1;
complete = true;
}
}
else if (h.melbstart != undefined) {
if (new Date(h.melbstart).getFullYear() >= cyear && new Date(h.melbend).getFullYear() < nyear) {
results[found] = h;
found += 1;
complete = true;
}
}
}
else if (search_time == '6-months' && !complete) {
var six = new Date().setMonth(this.getMonth() + 6);
if (h.startsyd != undefined) {
if (new Date(h.startsyd <= six)) {
results[found] = h;
found += 1;
complete = true;
}
}
else if (h.melbstart != undefined) {
if (new Date(h.melbstart <= six)) {
results[found] = h;
found += 1;
complete = true;
}
}
}
else if (search_time == '3-months' && !complete) {
var three = new Date().setMonth(this.getMonth() + 3);
if (h.startsyd != undefined) {
if (new Date(h.startsyd <= three)) {
results[found] = h;
found += 1;
complete = true;
}
}
else if (h.melbstart != undefined) {
if (new Date(h.melbstart <= three)) {
results[found] = h;
found += 1;
complete = true;
}
}
}
}
complete = true;
}
}
【问题讨论】:
-
哇,太棒了! +1但我喜欢事先找到这个问题的解决方案:)
-
“喜欢”有什么作用?
-
比较两个字符串。如果它与其他字符串一样,则返回 true
标签: javascript jquery json search