jquery копия json объект - PullRequest
       6

jquery копия json объект

0 голосов
/ 21 декабря 2009

Я перебираю набор данных json, который содержит результаты нескольких таблиц базы данных.Среди прочих данных у меня есть таблица RateTable ... erm ... и таблица ресурсов.RateTable имеет имя свойства ResourceId, которое ссылается на запись ресурсов.

Итак, я перебираю свой RateTable, и мне нужно сослаться на мою запись ресурса и использовать ее, скопировав в свою собственную переменную.Вот что у меня есть:

if (data)
    {
        var rs = data.Resources;

        $.each(data.RateTables, function(i,item){
            if (item.RateTableTypeId == 91)
            {
                var r = getresource(item.SupplierResourceId, rs)
                if (r)
                    customer_options += '<option value="' + r.ResourceId + '">' + r.Name + '<\/option>';
            }
            else if (item.RateTableTypeId == 92)
            {
                var r = getresource(item.CustomerResourceId, rs)
                if (r)
                    supplier_options += '<option value="' + r.ResourceId + '">' + r.Name + '<\/option>';
            }

        });

        $(".ddl-customer").html(customer_options);
        $(".ddl-supplier").html(supplier_options);
    }

    function getresource(id, items)
    {
        $.each(items, function(i,item){
            if (item.ResourceId == id)
                return $.extend(true, {}, item);
        });
    }

Проблема, с которой я столкнулся, заключается в том, что getresource не возвращает копию моего элемента Resource в переменной r.Почему?

Извините, я не могу опубликовать некоторые данные json, они абсолютно огромны, поэтому мы оставляем ссылки на клиентскую сторону для сокращения полезной нагрузки данных.Я надеюсь, что этого достаточно, чтобы помочь кому-то понять, что я пытаюсь сделать.

Ллойд

Ответы [ 2 ]

2 голосов
/ 21 декабря 2009

У меня проблема в том, что getresource не возвращает копию моего элемента Resource в переменной r. Почему?

getresource не имеет оператора возврата. Внутри анонимной функции есть оператор возврата, используемый вызовом $. Each () внутри getresource. Этот оператор возврата возвращается из анонимной функции и возвращается в $. Each () . $. Each () интерпретирует возвращаемое значение (если оно есть) как логическое значение, указывающее, следует ли продолжить итерацию. Но это значение никогда не передается обратно в getresource , который не имеет оператора возврата для его возврата в любом случае.

См. http://docs.jquery.com/Utilities/jQuery.each#objectcallback для получения подробной информации о $. Каждый () .

Одним из возможных исправлений является использование нативного javascript для цикла , например,

function getresource(id, items) {
    for (var i = 0; i < items.length; ++i) {
       var item = items[i];
       if (item.ResourceId == id) {
           return $.extend(true, {}, item);
       }
    }
}

Другой вариант - продолжать использовать $. Each () , но возвращаться из getresource , например,

function getresource(id, items) {
    var r = null;
    $.each(items, function(i, item){
        if (item.ResourceId == id) {
            r = $.extend(true, {}, item);
            return false; // end $.each() loop
        }
    });
    return r;
}
1 голос
/ 21 декабря 2009

Я признаю, что все еще учусь, и я никогда не видел, чтобы кто-то возвращал $.extend из функции ...

Орен прав, когда вам нужно вернуть false, если значение не найдено, поэтому я дам ему +1.

Кроме того, я попытался проверить вашу функцию, используя return $.extend(false, {}, items);, и кажется, что if (r) всегда будет истинным, потому что r является объектом,

Полагаю, вы пытаетесь вернуть две переменные из функции? В любом случае, лучший способ вернуть переменные mutliple из функции - использовать что-то вроде этого:

function getresource(id, items)
    {
        $.each(items, function(i,item){
            if (item.ResourceId == id)
                return [true, item];
        });
        return false;
    }

тогда r [0] содержит логическое значение, а r [1] содержит элемент (если оно истинно)

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