Javascript/jQuery:嵌套循环,防止覆盖对象属性
Javascript/jQuery: nesting loops, prevent overwriting object property
我有一个函数,应该用键建立一个数组。这些键将有一系列对象作为值。
我有一些循环嵌套在一起,我很接近解决方案,但在最后一个循环中,我犯了一个错误,我看不到解决方案。
函数循环遍历带有Id的数组。这些将是输出数组的键值。之后,它循环遍历一个包含许多对象的数组。那些对象有一个属性" category "有些人有一个,有些人有更多。对于for循环,我循环遍历所有的类别。
如果类别与id相同,那么它应该将对象推入var objs,它将被添加到右键。
这是所有的工作,但是,我想要的对象被保存只有一个类别。所以我在最后一个循环中声明了一个新的var,把obj放进去并设置obj。category。不幸的是,这覆盖了'source', 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将复制数组[x]上存在的每个属性,以及嵌套的对象及其属性。如果你不想这样。只需使用
var obj = {};
obj.category = array[x].category;
相关文章:
- 如何在循环中使用jQuery.on()方法,而不覆盖我循环的对象
- 如何使用自定义功能覆盖时间轴对象.js时间轴对象的_repaintMinorText
- (Javascript)覆盖对象内置或继承的属性
- 覆盖对象's的长度属性
- Javascript 覆盖对象的方法
- 为什么我的 JS 循环会覆盖对象中以前的条目
- 覆盖对象访问 JavaScript
- 如何实现滑块并替换覆盖对象的静态图像
- 如何覆盖对象的默认输出
- 如何获取覆盖对象的事件处理程序
- 代码重构,如何优雅地覆盖对象值
- JS能够覆盖对象的Getter方法
- 普通javascript:覆盖对象
- 扩展骨干类并只覆盖对象的一个字段
- 如何在JavaScript + Canvas中对覆盖对象进行分组
- jQuery扩展覆盖对象并创建重复
- 如何覆盖对象's在DevTools控制台中的显示名称
- 覆盖对象上的资源库
- 如何在移动设备的web浏览器中阻止触摸事件从覆盖对象上掉下来
- Javascript/jQuery:嵌套循环,防止覆盖对象属性