0

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

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;
}

提前致谢

4

5 回答 5

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);
    });
});
于 2013-04-24T21:33:21.500 回答
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”已经是值。您想要的是使用项目的索引来访问项目。

于 2013-04-24T21:29:43.160 回答
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);
    });
});

jsfiddle上

于 2013-04-24T21:46:43.117 回答
0

只需使用 .indexOf()

$("#search_str").click(function () {
  src_keyword = $("#str_search").val().trim();
  alert(array.indexOf(src_keyword) !== -1);
});
于 2013-04-24T21:32:43.027 回答
0

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

使用正则表达式test()方法。所以...

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

当然,您现在可以将RegExp构造函数从循环中取出,以及其他一些小改动......

于 2013-04-24T21:39:19.090 回答