Javascript字符串搜索不起作用?

时间:2013-04-24 21:24:39

标签: javascript jquery html arrays

我有一个包含一些值的数组。我希望能够检查输入字段中的值是否存在于数组中。我的代码现在没有返回任何内容。

HTML

<input type="text" id="str_search" value=" "/>
<input type="button" id="search_str" value="search" />

的Javascript

var array = ["php", "jquery", "java"];
var src_keyword = "";
$(document).ready(function () {
    $("#search_str").click(function () {
        src_keyword = $("#str_search").val();
        // alert(find(array,src_keyword));
        find(array, src_keyword)
    });
});

function find(arr, src_keyword1) {
    var result = [];
    alert(src_keyword1);
    // src_keyword1="oo";
    for (var i in arr) {
        var search = new RegExp(src_keyword1, "gi");
        if (arr[i].match(search)) {
            alert(arr[i])
            result.push(arr[i]);
        }
    }
    return result;
}

提前致谢

5 个答案:

答案 0 :(得分:2)

福克: - http://jsfiddle.net/jfy8J/

可能为什么你的代码不起作用是因为你在文本框值中有一个空格而你没有修剪它。

var array = ["php", "jquery", "java"];
var src_keyword = "";
$(document).ready(function () {
    $("#search_str").click(function () {
        src_keyword = $("#str_search").val().trim();
        var res = $.grep(array,function(obj,_){
            return obj === src_keyword;
        });
       if(res.length == 0) alert('not found'); else alert('found');
    });
});

<强>更新 找不到值: - http://jsfiddle.net/ELqZS/

var array = ["php", "jquery", "java"];
var src_keyword = "";
$(document).ready(function () {
    $("#search_str").click(function () {
        src_keyword = $("#str_search").val().trim();
       var items = $.grep(array,function(obj,_){
            return obj !== src_keyword;
        });
    alert(items);
    });
});

更新2 会返回包含搜索文本http://jsfiddle.net/8FJYS/

的数组中的项目
var array = ["php", "jquery", "java"];
var src_keyword = "";
$(document).ready(function () {
    $("#search_str").click(function () {
        src_keyword = $("#str_search").val().trim();
      var items =  array.filter(function(o, _){
            return o.indexOf(src_keyword) > -1;
        });
    alert(items);
    });
});

答案 1 :(得分:1)

更改for循环
for (var i in arr)

for (var i=0; i < arr.length; i++)

前一个循环遍历对象的所有属性以及每个索引元素的值。例如

var a = [7,8,9,0];
a.blah = "aoeusnth";
for (var prop in a) {
    console.log(prop);
}

将记录

7
8
9
0
"blah"

到控制台。

您正在使用变量“i”来访问数组的值,但在您的代码中,“i”已经是值。你想要的是使用项目的索引来访问该项目。

答案 2 :(得分:0)

只需使用.indexOf()

$("#search_str").click(function () {
  src_keyword = $("#str_search").val().trim();
  alert(array.indexOf(src_keyword) !== -1);
});

答案 3 :(得分:0)

反转测试过程。现在,您正在测试result字符串的search字符串。你想扭转这种局面。

使用regexp test()方法。所以......

var search = new RegExp(src_keyword1, "gi");
if(search.test(arr[i])){....}

当然,您现在可以将RegExp构造函数从循环中移除,以及其他一些小的更改....

答案 4 :(得分:0)

我认为你想使用Array.indexOf而不是正则表达式解决方案。

  

摘要

     

返回可在其中找到给定元素的第一个索引   数组,如果不存在,则返回-1。

<input type="text" id="str_search" value=" " />
<input type="button" id="search_str" value="search" />

var array = ["php", "jquery", "java"];
var src_keyword = "";
$(document).ready(function () {
    $("#search_str").click(function () {
        src_keyword = $("#str_search").val().trim();
        alert(array.indexOf(src_keyword) !== -1);
    });
});

on jsfiddle