gpt4 book ai didi

Javascript/jQuery : nesting loops, 防止覆盖对象属性

转载 作者:行者123 更新时间:2023-11-30 05:38:03 27 4
gpt4 key购买 nike

我有一个函数应该用键构建一个数组。这些键将具有一系列对象作为值。

我有一些相互嵌套的循环,我非常接近解决方案,但在最后一个循环中我犯了一个错误,我看不到解决方案。

函数循环遍历一个带有 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;

提供的类别也不是对象。

关于Javascript/jQuery : nesting loops, 防止覆盖对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22400094/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com