2

次のような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();

追加されたプロパティがループの最後に巻き上げられるという問題が発生します...そしてそれらが一番​​上にある必要があります

誰でもこれを解決する方法を知っていますか?

アップデート:

オブジェクトの構造は自由に変更できません。配列をコンテナーとして使用することもできません。それは問題外です。

4

1 に答える 1

0

スタックが必要な場合は、Array順序が定義されたリストを使用する必要があります。オブジェクトのプロパティは JavaScript にはありません。「連想配列」のようなものはありません。また、プロトタイプを作成する必要があります。

オブジェクトと同じように配列のプロパティを設定できますが、プロパティ名は数値 (つまり整数) である必要があります。次に、-loop でそれらをループしますforArrayオブジェクトには、たとえば、最初または最後にアイテムを追加するための追加のメソッドもあります (以下で使用しています)。

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
    } 
};
于 2012-08-27T11:07:53.627 に答える