0

我正在遍历一组包含几个数据库表结果的 json 数据。在其他数据中,我有一个 RateTable ...erm... 表和一个 Resources 表。RateTable 有一个属性名称 ResourceId,它链接到 Resources 记录。

所以,我正在遍历我的 RateTable,我需要引用我的 Resource 记录并通过将其复制到它自己的变量中来使用它。这是我到目前为止所拥有的:

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 没有在变量 r 中返回我的 Resource 项的副本。为什么?

抱歉,我无法发布一些 json 数据,它绝对是巨大的,这就是为什么我们将引用留给客户端以减少数据负载。我希望有足够的内容可以帮助某人了解我正在尝试做的事情。

劳埃德

4

2 回答 2

2

我遇到的问题是 getresource 没有在变量 r 中返回我的 Resource 项的副本。为什么?

getresource没有返回语句。getresource 中的$.each()调用使用的匿名函数中有一个 return 语句。该 return 语句从匿名函数返回并返回到$.each()$.each()将返回的值——如果有的话——解释为一个布尔值,指示是否继续迭代。但是该值永远不会被传递回getresource,它无论如何都没有返回语句来返回它。

有关$.each()的详细信息,请参阅http://docs.jquery.com/Utilities/jQuery.each#objectcallback

一种可能的解决方法是改用javascript的本机for循环,例如

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;
}
于 2009-12-21T05:14:42.103 回答
1

我承认我还在学习,我从未见过有人$.extend从函数中返回一个...

Oren 是正确的,如果找不到该值,您需要返回 false,所以我会给他 +1。

此外,我尝试使用它来测试你的函数return $.extend(false, {}, items);,它似乎if (r)总是正确的,因为r它是一个对象,

我猜你正试图从一个函数中返回两个变量?无论如何,从函数返回多个变量的最佳方法是使用如下内容:

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

然后 r[0] 包含布尔值并且 r[1] 包含项目(如果为真)

于 2009-12-21T05:51:28.077 回答