我有一个名为apples
的对象,如果我执行apples[0].weight
之类的操作,则会返回一个值。现在我希望能够存储apples
的数组。让我们调用数组myApples
。如何将apples
的多个实例添加到myApples
数组,而不将值更改为最新的值。例如:
apples[0].weight = 10;
apples[1].weight = 20;
myApples.push(apples);
apples[0].weight = 15;
apples[1].weight = 16;
myApples.push(apples);
现在如果我要打印值myApples[0].apples[0].weight
我得到15而不是得到10.我认为它是因为引用是相同的数组,所以每次更改它时它都会更新。我将如何存储这些apple
“状态”,以便我可以记录对其所做的更改。请记住,我想让这个任意,所以我不得不做像apples1,apples2,apples3这样的东西,因为对此的更改可能是无限的。(在我的实际项目中,我将精确点存储在画布上,所以我基本上可以执行“撤消”和“重做”功能,并希望每次在画布上发生更改时都存储这些精确定位的值。)
编辑 -
这是我apples
或pinpoints
:
var options = {pinpoints: [ { "top": 50,
"left": 280,
"width": 200,
"height": 200},
{ "top": 0,
"left": 0,
"width": 300,
"height": 74 } ]}
var optionConfig = $.extend({}, $.fn.mapImage.defaults, options);
var myPinpoints = optionConfig.pinpoints;
所以,如果我做myPinpoints [0]。左边它给了我280,我希望能够将myPinpoints推入一个数组,然后将myPinpoints [0] .left更改为其他内容,然后再将其推送到数组并保存两个值
答案 0 :(得分:1)
那么你还需要什么“苹果”呢?
myApples.push([
{ weight: 10 },
{ weight: 20 }
]);
myApples.push([
{ weight: 15 },
{ weight: 16 }
]);
现在,如果苹果不仅仅是“重量”,那么你可能需要一个苹果制造商的功能:
function makeApple(weight, variety, color) {
return {
weight: weight,
variety: variety || "Braeburn",
color: color || "red"
};
}
然后你可以这样做:
myApples.push([
makeApple(10, "Fuji"),
makeApple(20, "Granny Smith", "green")
]);
或其他什么。
编辑 - 正如费利克斯金指出的那样,“苹果”的本质并不是非常明确。在任何情况下,无论“苹果”是什么,我个人都倾向于制作一个更加面向功能的设置来创建对象,数组,或对象数组,或者它们是什么。
答案 1 :(得分:1)
您可以使用jQuery.clone类型的API来克隆Object并将其移动到Stack或Queue。 这样,您可以确保单独维护对象状态。
答案 2 :(得分:0)
我认为对象apple是基于参考的。因此,即使将它们推送到阵列上,当您将值更改为15时,仍然会更改第一个苹果对象。请尝试使用关键字“new”。
var apples1 = new int[99];
var apples2 = new int[99];
apples1[0].weight = 10;
apples1[1].weight = 20;
myApples.push(apples1);
apples2[0].weight = 15;
apples2[1].weight = 16;
myApples.push(apples2);
答案 3 :(得分:0)
安东尼,
为什么不使用二维数组呢? e.g。
var apples = new Array(100);
apples[0] = new Array(2);
apples[0][0] = {weight: 0};
apples[0][1] = {weight: 1};
apples[1] = new Array(2);
apples[1][0] = {weight: 10};
apples[1][1] = {weight: 11};
此致 尼尔
答案 4 :(得分:0)
现在,我在这里了解的更多,我将如何做到这一点。首先定义包含x,y输入的坐标对象。接下来设置一个堆叠这些精确定位点/坐标的方法,我假设您正在处理x,y网格。我正在松散地编写这段代码并且没有进行测试,所以请耐心等待。
// declare an array in global scope
var CoordinateCollection = new Array();
// create an object model
function Coordinate(x,y) {
this.x = x;
this.y = y;
}
// this function will push a new coordinate onto the array
function AddCoordinate(x,y) {
CoordinateCollection.push(new Coordinate(x,y));
}
// after calling AddCoordinate you could now
// say something like
// alert(CoordinateCollection[0].x);
// if you call it again you could say
// alert(CoordinateCollection[1].x);
// and it would have a different value if the
// two original values were different.
编辑...
您可以省略对AddCoordinate的调用并使用其中的行。