我有一个js,对象是这样的:
function test{
this.variable = {};
this.populate = function(){
// do some crap....
// and i populate the object like this
this.variable{xyz..} = new object();
}
this.outputThecrap(){
for (var key in data) {
if (data.hasOwnProperty(key)) {
if(data[key].idParent != '0'){
//do some stuff
}
}
}
}
this.addSomeOnBeginigQQ(){
// how do i do that!!!!Q_Q
this.variable{blabla...} = new blabla();
}
}
现在我填充了像
这样的对象var t = new test();
t.populate();
t.addSomeOnBegining();
t.outputThecrap();
我遇到的问题是,添加的属性会在循环结束时结束......我需要它们位于顶部
任何人都知道如何解决这个问题?
更新:
对象的结构无法改变。我不能将数组用作容器,这是不可能的。
答案 0 :(得分:0)
如果您需要堆栈,则需要使用Array
- 具有已定义订单的列表。 JavaScript中的对象属性没有,没有像“关联数组”那样的东西。另外,你应该是原型。
您可以像对象一样设置数组的属性,但属性名称需要以数字形式(即整数)。然后使用for
循环遍历它们。 Array
objects还有一些额外的方法,例如在开头或结尾添加项目(我在下面使用过):
function Test() {
this.data = []; // an array
}
Test.prototype.populate = function(){
// populate the array like this
this.data.push({…});
};
Test.prototype.outputThecrap = function(){
for (var i=0; i<this.data.length; i++) {
var item = this.data[i];
if (item /* has the right properties*/)
//do some stuff
}
};
Test.prototype.addSomeOnBeginning(){
this.data.unshift({…});
};
然后像这样使用它:
var t = new Test();
t.populate();
t.addSomeOnBeginning();
t.outputThecrap();
“有序键阵列”如下所示:
function Test() {
this.data = {}; // the object
this.order = []; // an array
}
Test.prototype.populate = function(){
this.data["something"] = {…}
this.order.push("something");
};
Test.prototype.addSomeOnBeginning(){
this.data["other"] = {…};
this.order.unshift("other");
};
Test.prototype.outputThecrap = function(){
for (var i=0; i<this.order.length; i++) {
var key = this.order[i],
item = this.data[key];
if (item && key /* fulfill your requirements */)
// do some stuff
}
};