尽管它应匹配,但未能使用数据名来匹配数组

时间:2014-05-29 18:05:00

标签: javascript jquery arrays

我有一个

  • 列表,会附加一个与列表值匹配的数据名称,例如

    <li data-name="hello">hello</li>
    

    我还将几个参数推入一个数组 所以例如 var array = []; array [0] = a:你好b:再见c:seeyou

    所以现在我想做的是 1)点击li检索数据名称值“hello” 2)检查阵列的“hello”是否有另一个元素“hello” 3)如果匹配,获取索引位置并从数组中删除该索引 (因为

  • 中的值“hello”是从数组中的元素中调出的,这就是为什么我要检测数组中包含单词“hello”的确切索引在
  • 上,当我按删除时将其删除)

    这是我用来匹配的代码

    found = $.inArray($(this).attr("data-name"), array);
    

    我放在

                $(".li").click(function(){
                    alert("data name is " + $(this).attr("data-name"));
                    found = $.inArray($(this).attr("data-name"), array);
                    alert(found);
                    alert("name of element is " + array.a);
                });
    

    正如我之前所说,当我附加

  • 列表时,我已经使它成为数据名与其中的值相同。

    使用上面的代码我已成功检索匹配的数据名称“hello”和元素“hello”,但我的发现返回-1,这意味着它不匹配。当我的警报结果匹配时,不知道为什么它不匹配?感谢

  • 1 个答案:

    答案 0 :(得分:0)

    你的数组变量包含一个对象数组,你不能搜索“hello”你需要找到object.a == 'hello'

    所在的对象

    为此你可以使用grep(http://api.jquery.com/jquery.grep/

    $(function() {
        var array = [ { a: "hello", b: 'there'} , { a: "world", b: 'hi'} ];
        var stuff = 'hello'; // <- this can be $(this).attr("data-name")
        var found = $.grep(array, function(n) { return n.a == stuff; });
    
        // found will be a list of results - we only want the first one
        if (found.length == 1) {
            alert('found: ' + found[0].a);
        }
    });
    

    小提琴:http://jsfiddle.net/yQat2/3/

    更新: 为了澄清grep接受数组和函数,函数必须执行比较,这将对输入数组中的每个元素进行。 Grep返回比较成功的所有项目。在我们的示例中,它将返回具有a属性== stuff的所有元素。这是$(this).attr("data-name")应放在代码中的地方。

    在你的情况下,我假设每个a项都是唯一的,所以我检查结果是1,如果是,我们显示为第一个元素找到的名称。