使用jQuery的inArray方法和JavaScript关联数组(或对象)

时间:2011-02-18 18:59:04

标签: jquery arrays

我可能没有正确使用jQuery的inArray()函数,但我必须构造一个对象,该对象只有两个其他JavaScript对象的索引,其值完全匹配:

var arr1 = {
    a: "alfa",
    b: "beta"};
var arr2 = {b: "beta"};
alert(jQuery.inArray(arr2, arr1));

在这里,我希望得到一个仅包含:

的对象
{b: "beta"}

同样,如果数组看起来像这样:

var arr1 = {
    a: "alfa",
    b: "beta",
    c: "test"};
var arr2 = {b: "beta",
            c: "not the same value"};

我仍然期待:

{b: "beta"}

因为c索引中的值不完全相同。

提前致谢, 再见 小时。

4 个答案:

答案 0 :(得分:2)

试试这个:

http://jsfiddle.net/treeface/u5xDz/1/

这里的想法是循环遍历arr1对象并查看arr2中是否存在类似的索引,以及arr1中该索引的值是否与arr2中的索引值相匹配。

var arr1 = {
        a: "alfa",
        b: "beta"
    },
    arr2 = {b: "beta"},
    combinedArr = {};


$.each(arr1, function(ind, el) {
    if (typeof arr2[ind] !== 'undefined' && arr1[ind] === arr2[ind])
        combinedArr[ind] = el;
});

console.log(combinedArr);

答案 1 :(得分:2)

默认的jQuery inArray函数无法同时搜索键和值,

    $.fn.array_search = function(what, where)
    {
        var Match = null;
        if(where === undefined) var where = 'value';
        $(this).each(function(key, value)
        {
            if(where == 'value')
            {
                if(what == value) Match = key;
            }else
            {
                if(what == key) Match = value;  
            }
        });

        return (Match) ? Match : false;
    }

用法:

$(array).array_search('Value to Search'); //default search in value
$(array).array_search('key to search', 'key'); //search in key

答案 2 :(得分:1)

您在示例中定义的变量不是数组,而是对象。此外,此函数的第一个参数应该是要搜索的值。因此,您的代码需要修改为:

var arr1 = [
    "alfa",
    "beta" ];
var arr2 = [ "beta" ];
alert(jQuery.inArray(arr2[0], arr1));

我认为你可能追求的更多是两个对象/数组的交叉。您可以使用jQuery.map()或jQuery.grep()函数编写专门的比较函数。

答案 3 :(得分:0)

那不是数组。这是一个对象。 [inArray] [1]参数也是value, array。所以你可以像这样检查数组中的对象:

var b = {b: "beta"}
var arr1 = [
    {a: "alfa"},
    b
];

alert(jQuery.inArray(b, arr1));

使用方括号

声明数组
[value,value] 

声明对象

{name: value, name: value }

[1]:http:// api.jquery.com/jQuery.inArray