Критика My JavaScript Search Array Функция - PullRequest
1 голос
/ 24 июня 2010

Недавно я выполнял тонны 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)];

Ответы [ 2 ]

1 голос
/ 24 июня 2010

Действительно хороший плагин.Разместите его на github, пока вы на нем.Пара вещей:

Не вызывайте вашу функцию indexOfArray, потому что она не выполняет поиск индекса данного объекта, а скорее выполняет поиск по ключам и значениям с учетом частичного /полный объект в качестве шаблона.Он также ищет примитивы, но это скорее дополнительный бонус.Вам не нужно соглашаться с прошлыми соглашениями об именовании этой вещи.Используйте любое имя, которое лучше всего описывает.

Вы можете обойтись без объявления массива keys и пробела в некотором месте.Но это микрооптимизация, если вы не имеете дело с очень большими объектами.

Это может быть просто желаемое за действительное, но поиск со структурой вложенных объектов в качестве ключа поиска будет действительно потрясающим:)

Хороший плагин и код.Было бы очень полезно при запросе документов JSON.

1 голос
/ 24 июня 2010

Что касается кроссбраузерности, вам не о чем беспокоиться.

С точки зрения эффективности, это неплохо, хотя вы могли бы, вероятно, сделать с кэшированием некоторых значений, например, для поискаСвойство .length массивов много.Также с keys[b].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...