我有一个看起来像这样的数组:

selected_products[0]=["r1","7up",61,"Albertsons"]
selected_products[1]=["r3", "Arrowhead",78,"Arrowhead "]
selected_products[2]=["r8", "Betty Crocker Cake Mix (Variety)",109,"Arrowhead "]
...

如何根据每个项目的第一个条目(r1,r2,..)搜索此数组中的项目
数组很大,我正在寻找一种快速有效的方法来从该数组中获取结果
我使用了JQuery函数jQuery.inArray,但是在我的数组中找不到任何东西,我这样使用它:
alert($.inArray(["r1","7up",61,"Albertsons"],selected_products))// it returns -1
alert($.inArray("r1",selected_products))//this also returns -1

最佳答案

如果您希望它快一些,则需要一个for循环,以便在找到匹配项时可以中断循环。

var result;
for( var i = 0, len = selected_products.length; i < len; i++ ) {
    if( selected_products[i][0] === 'r1' ) {
        result = selected_products[i];
        break;
    }
}

当然,这假设只有一场比赛。

如果不止一个,那么如果需要jQuery,可以使用$.grep:
var result = $.grep(selected_products, function(v,i) {
    return v[0] === 'r1';
});

这将为您提供一个新的数组,它是匹配项的子集。

如果仅支持现代JavaScript环境,则可以类似的方式使用Array.prototype.filter
var result = selected_products.filter(function(v,i) {
    return v[0] === 'r1';
});

另一种解决方案是创建一个键为rn项的对象。这应该给您一个非常快速的查找表。
var r_table = {};
for( var i = 0, len = selected_products.length; i < len; i++ ) {
    r_table[selected_products[i][0]] = selected_products[i];
}

然后像这样进行查找:
r_table.r4;

再次假设没有重复的rn项。

07-24 17:17
查看更多