我有以下内容:
var travel_path=[];
var point={
"left": 0,
"top": 0
};
while(/*some condition here*/){
point.left+=3;
point.top+=5;
travel_path.push(point);
}
console.log(travel_path);
现在,如果while
循环运行10次迭代,而不是在每个元素中获得递增的left
和top
值,我会得到10个具有相同值{的元素{1}}。
所以看起来,即使我使用push将元素追加到数组的末尾,它也会以某种方式更新所有以前的元素。
我有什么想法可以解决这个问题吗?
答案 0 :(得分:2)
您可以使用Object.assign()
在循环的每次迭代中创建对象的克隆,并将该对象推送到数组。
var travel_path = [];
var point = {
"left": 0,
"top": 0
};
var i = 0;
while (i++ < 5) {
point.left += 3;
point.top += 5;
travel_path.push(Object.assign({}, point));
}
console.log(travel_path);
&#13;
答案 1 :(得分:1)
这就是javascript
的工作原理。你可以这样做:
var travel_path = [];
var lastPoint;
var point = {
"left": 0,
"top": 0
};
while (/*some condition here*/) {
lastPoint = travel_path[travel_path.length-1] || point;
travel_path.push({
left: lastPoint.left + 3,
top: lastPoint.top + 5
});
}
console.log(travel_path);
答案 2 :(得分:1)
试试这个:
var travel_path=[];
var point={
"left": 0,
"top": 0
};
while(/*some condition here*/){
point.left+=3;
point.top+=5;
var tempPoint={
"left": point.left,
"top": point.top
};
travel_path.push(tempPoint);
}
console.log(travel_path);
答案 3 :(得分:1)
根据您计算新结果的方式,您可以保持计数,例如point
,并使用值推送新对象。
var travel_path=[];
var point={
left: 0,
top: 0
};
while(/*some condition here*/){
point.left += 3;
point.top += 5;
travel_path.push({ left: point.left, top: point.top });
}
console.log(travel_path);