最近,我一直在做大量的Ajax,并与许多域对象一起转换了JavaScript对应对象。我发现自己编写了一些循环遍历对象数组以按属性值搜索的函数。我决定编写一个简单的jQuery插件,使我可以搜索原始类型或复杂类型的数组。
注意:这是我第一次编写jQuery插件。我不确定我是否采用正确的方法。我主要关心的是搜索逻辑的效率和跨浏览器的支持。
谢谢!
批注代码:
$(function() {
$.indexOfArray = function (search, array) {
var keys = [];
var index = -1;
var primitiveType = true;
for (var propertyName in search) {
primitiveType = false;
keys.push(propertyName);
}
if ($.isArray(array)) {
for (var a = 0; a < array.length; a++) {
var match = 0;
if (primitiveType && array[a] == search) {
index = a;
break;
}
else if (!primitiveType) {
for (var b = 0; b < keys.length; b++) {
if (search[keys[b]] == array[a][keys[b]]) {
match++;
}
}
if (match == keys.length) {
index = a;
break;
}
}
}
}
return index;
}
});
简单的使用示例(它也适用于原始类型数组,例如字符串或整数):
var testArray = [{Id:1, FirstName: 'John'}, {Id:2, FirstName: 'Jake'}, {Id:2, FirstName: 'Jason'}];
var selectedPerson = testArray[$.indexOfArray({Id:2}, testArray)];
最佳答案
就跨浏览器而言,您实际上没有什么可担心的。
就效率而言,这还不错,尽管您可能可以缓存一些值,例如,您对数组的.length属性进行了很多查找。还要使用keys[b]
。