我正在遍历一组带有一些数据库表结果的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数据,它绝对庞大,这就是为什么我们将引用留给客户端以减少数据有效负载的原因。我希望有足够的帮助别人看到我在做什么。

劳埃德

最佳答案

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


getresource没有return语句。 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;
}

关于javascript - jQuery复制json对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1937949/

10-10 23:11