我正在迭代一组 json 数据,其中包含一些数据库表的结果。在其他数据中,我有一个 RateTable ...erm... 表和一个 Resources 表。 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 没有返回变量 r 中我的资源项的副本。为什么?
抱歉,我无法发布一些 json 数据,它绝对巨大,这就是为什么我们将引用留给客户端以减少数据负载。我希望有足够的内容可以帮助别人了解我正在尝试做的事情。
劳埃德
最佳答案
The problem I have is that getresource isn't returning a copy of my Resource item in the variable r. Why?
getresource 没有返回语句。 getresource 内的 $.each() 调用使用的匿名函数内有一个 return 语句。该 return 语句从匿名函数返回并返回到 $.each()。 $.each() 将返回值(如果有)解释为一个 bool 值,指示是否继续迭代。但该值永远不会传递回 getresource,无论如何它都没有 return 语句来返回它。
参见http://docs.jquery.com/Utilities/jQuery.each#objectcallback有关 $.each() 的详细信息。
一个可能的解决方法是使用 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/