我有一个功能,应该建立一个带有键的数组。这些键将具有一系列对象作为值。
我彼此嵌套了一些循环,而且距离解决方案还很近,但是在最后一个循环中,我犯了一个错误,看不到解决方案。
该函数在带有ID的数组上循环。这些将是输出数组的键值。之后,它将遍历具有许多对象的数组。这些对象具有属性“类别”。其中一些有一个,其他一些。因此,对于一个for循环,我遍历了所有类别。
如果类别与id相同,则应将对象推送到var objs,该对象将添加到右键中。
一切正常,但是,我希望对象仅保存一个类别。所以我在最后一个循环中声明了一个新的var,将obj放在其中并设置了obj.category。不幸的是,这覆盖了“源” array [x] .category。这不好,因为会发生这样的问题:在此函数中只有两个类别的对象只能被找到一次,并且必须被找到两次,因此可以被保存两次(每个代表键值一次)。
一小段代码的大量解释...
$.each(unique_id, function(i, el){
var objs = [];
for(var x in array)
{
for(var j=0; j<array[x].category.length; j++)
{
if(array[x].category[j] == el)
{
var obj = array[x];
obj.category = el;
objs.push(obj);
}
}
}
data[el] = objs;
})
发生的事情是:obj和array [x]都指向同一个对象。它们是指向同一对象的两个引用。您可以尝试以下操作:
$.each(unique_id, function(i, el){
var objs = [];
for(var x in array)
{
for(var j=0; j<array[x].category.length; j++)
{
if(array[x].category[j] == el)
{
var obj = {};
$.extend(true,obj,array[x]);
obj.category = el;
objs.push(obj);
}
}
}
data[el] = objs;
});
另外,在javascript中,变量是函数作用域的,因此即使您在内部循环中声明它们,它们在整个函数中也是可见的,不仅在定义它的内部循环中是可见的。当然,$ extend将复制存在于array [x]上的每个属性以及嵌套对象及其属性。如果您不想要那样。只是使用
var obj = {};
obj.category = array[x].category;
提供的类别也不是对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句