【问题标题】:Javascript string search not working?Javascript字符串搜索不起作用?
【发布时间】:2013-04-18 14:57:36
【问题描述】:

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

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

提前致谢

【问题讨论】:

  • 如果您要遍历整个列表,为什么不使用相等比较?
  • 我不清楚你的话请解释一下
  • 我认为他希望能够找到像 ffffjavaffff 这样的实例
  • 我不确定这里问的是什么,如果你有一个字符串数组并想查看一个值是否存在,它看起来像一个 Array.indexOf 解决方案?

标签: javascript jquery html arrays


【解决方案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”已经是值。您想要的是使用项目的索引来访问项目。

【讨论】:

  • 前一个for循环会遍历对象中的所有属性,而不仅仅是数组中的元素。
  • “样本问题”是什么意思?
  • 对不起 - 我还是不明白。你在问问题吗?
【解决方案2】:

只需使用 .indexOf()

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

【讨论】:

  • 添加 .trim() 应该可以解决这个问题。
  • @Xotic750 谢谢...做到了:)
  • 当我搜索 php 时返回 false
  • @Seenu 很抱歉小提琴太旧了...这是更新版本jsfiddle.net/DV3a3/2 :)
【解决方案3】:

分叉:- 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);
    });
});

【讨论】:

  • 您想从数组中返回未找到的值吗?
  • 更新了小提琴,为您提供数组中不匹配的项目
  • 好吧,我很困惑。如果搜索文本包含在数组项中,则返回那些包含搜索文本的项?
  • 最后怀疑如何获取数组位置
  • 我认为你的数组值之一是未定义的,你可以使用这个小提琴jsfiddle.net/Phdc6。这有一张支票
【解决方案4】:

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

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

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

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

【讨论】:

    【解决方案5】:

    我认为您想使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 2013-04-13
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多