0

私は私の小さなプロジェクトを構築していますが、反復の順序が保証されたキーと値の関係を持つための他の解決策は見つかりませんでした。

私がこれまでに思いついたのはこれです、

var Plate = function () {

    this.children = [];
    this.childrenKeys = [];
};

var proto = Plate.prototype;

proto.addChild = function (key, child) {

    this.childrenKeys.push(key);
    this.children.push(child);
};

proto.removeChild = function (key) {

    var index = this.childrenKeys.indexOf(key);
    delete(this.children[index]);
};

proto.update = function () {

    this.children.forEach(function (child) {

        child.update();
    });
};

これは機能し、キーと値を使用して追加しPlateたり、キーを使用してプレートから削除したりできますが、そうするのは正しくないようです。

オブジェクトを使用できないことを理解していますfor...in。反復の順序が完全に矛盾しているため、そのようにすることはできません。

これはこれを行うための正しい方法ですか、それともこれを行うJavaScriptの方法で構築されていますか?

ありがとうございました

4

1 に答える 1

0

オブジェクトにキーと値が含まれるオブジェクトの配列を使用しないのはなぜですか?

var list = [
    { key: '2', value: 'foo' },
    { key: 'abc', value: 'bar' }
];

// Usage
alert(list[0].key); // '2'
alert(list[0].value); // 'foo'

このメソッドを使用したコードは次のとおりです(テストされていません)。

var Plate = function () {

    this.list = []
};

var proto = Plate.prototype;

proto.addChild = function (key, child) {

    this.list.push({ key: key, child: child });
};

proto.removeChild = function (key) {
    for (var i = 0; i < this.list.length; i++) {
        if (this.list[i].key === key) {
            delete(this.list[i]);
            return;
        }
    }
};

proto.update = function () {

    for (var i = 0; i < this.list.length; i++) {
        this.list[i].child.update();
    }
};
于 2013-04-06T10:13:11.940 に答える