Javascript,将对象推入for循环会产生重复的值
在for循环中,将对象推到另一个对象中有问题。它会产生重复的值。我假设问题是关于Javascript,将对象推入for循环会产生重复的值,javascript,jquery,object,Javascript,Jquery,Object,在for循环中,将对象推到另一个对象中有问题。它会产生重复的值。我假设问题是关于参考文献的: var controllers = ["Patrick","Alain"]; var steval = {"name":null,"prix":{max: 5, min: 3},"comments":null}; var evals = []; for (index = 0; index < co
参考文献的
:
var controllers = ["Patrick","Alain"];
var steval = {"name":null,"prix":{max: 5, min: 3},"comments":null};
var evals = [];
for (index = 0; index < controllers.length; ++index) {
var name = controllers[index];
var eval = steval;
eval.name = name;
console.log(eval);
evals.push(eval);
}
console.log(evals);
$("#json").html(JSON.stringify(evals));
var控制器=[“Patrick”,“Alain”];
var steval={“name”:null,“prix”:{max:5,min:3},“comments”:null};
var evals=[];
对于(索引=0;索引
结果如下:
我不明白的是,我的console.log(eval)
返回正确的值,但显然evals.push(eval)
总是推送相同的值
始终推送相同的值
因为代码中只有一个对象:steval
。您只需更改该对象的名称
属性
如果要创建多个对象,请在循环内创建该对象:
var控制器=[“Patrick”,“Alain”];
var evals=[];
对于(索引=0;索引
始终推送相同的值
因为代码中只有一个对象:steval
。您只需更改该对象的名称
属性
如果要创建多个对象,请在循环内创建该对象:
var控制器=[“Patrick”,“Alain”];
var evals=[];
对于(索引=0;索引 控制台日志(evals)代码>如另一个答案(信用到期)中所述,只有一个steval
实例被更改和推送
您可以使用jquery(标记为jquery)将deep
设置为true(因为您有嵌套对象)来“克隆”steval:
或者,您可以使用JSON stringify/parse生成克隆(或者将原始文件存储为JSON以跳过stringify部分),但这并不理想
var控制器=[“Patrick”,“Alain”];
var steval={“name”:null,“prix”:{max:5,min:3},“comments”:null};
var evals=[];
对于(索引=0;索引
如另一个答案(信用到期)中所述,只有一个steval
实例被更改和推送
您可以使用jquery(标记为jquery)将deep
设置为true(因为您有嵌套对象)来“克隆”steval:
或者,您可以使用JSON stringify/parse生成克隆(或者将原始文件存储为JSON以跳过stringify部分),但这并不理想
var控制器=[“Patrick”,“Alain”];
var steval={“name”:null,“prix”:{max:5,min:3},“comments”:null};
var evals=[];
对于(索引=0;索引
谢谢。我确实想过,但它觉得那样做不太好。是否有办法“克隆”该对象而不是简单地引用它?如果您使用嵌套对象,这不是一个简单的方法。我也不认为这样做有什么好处。“漂亮”是相对的。例如,我喜欢将相关代码放在一起,所以我更喜欢在需要的地方看到对象文字,而不是一些不太清晰的克隆(someObject)
调用,我首先要找出什么是someObject
。你说得没错,似乎更符合逻辑将数据与逻辑分开是一种常见做法,将steval
放在方法中可能会使维护变得困难(而上面的评论认为它更容易维护,因为它就在那里)。另外,如果您碰巧想在多个地方使用它,那么在一个地方定义它是有意义的。取决于场景/首选项,在问题中这样的小片段中,它可能更容易与代码一起使用。@freedomn-m:当然,上下文就是一切。我们不知道数据到底是什么,动态和静态是什么,等等。这都是权衡。最终,一个合适的类
可能是最好的解决方案。谢谢。我确实想过,但它觉得那样做不太好。是否有办法“克隆”该对象而不是简单地引用它?如果您使用嵌套对象,这不是一个简单的方法。我也不认为这样做有什么好处。“漂亮”是相对的。例如,我喜欢将相关代码放在一起,所以我更喜欢在需要的地方看到对象文字,而不是一些不太清晰的克隆(someObject)
调用,我首先要找出什么是someObject
。你说得没错,似乎更符合逻辑将数据与逻辑分开是一种常见做法,将steval
放在方法中可能会使维护变得困难(而上面的评论认为它更容易维护,因为它就在那里)。另外,如果您碰巧想在多个地方使用它,那么在一个地方定义它是有意义的。取决于场景/首选项,在问题中这样的小片段中,它可能更容易与代码一起使用。@free
let eval = $.extend(true, {}, steval);