我有一个看起来像这样的数组:
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
项。