Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用保证顺序迭代javascript建立键值关系的更好方法?_Javascript_Arrays_Key_Iteration - Fatal编程技术网

使用保证顺序迭代javascript建立键值关系的更好方法?

使用保证顺序迭代javascript建立键值关系的更好方法?,javascript,arrays,key,iteration,Javascript,Arrays,Key,Iteration,我正在构建我的一个小项目,并且没有找到其他解决方案来保证迭代顺序的键值关系 到目前为止我想到的是 var Plate = function () { this.children = []; this.childrenKeys = []; }; var proto = Plate.prototype; proto.addChild = function (key, child) { this.childrenKeys.push(key); this.chil

我正在构建我的一个小项目,并且没有找到其他解决方案来保证迭代顺序的键值关系

到目前为止我想到的是

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();
    });
};
虽然这确实有效,但我可以用一个键和一个值添加到
图版
,也可以用一个键从图版中删除,但这样做似乎并不正确

我知道我不能在中使用对象和
,因为迭代顺序完全不一致,我不能让它像那样

这是执行此操作的正确方法还是有内置javascript的方法


谢谢

为什么不使用包含键和值的对象数组

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

// Usage
alert(list[0].key); // '2'
alert(list[0].value); // 'foo'
下面是使用此方法的代码(未测试)

var板=功能(){
this.list=[]
};
var proto=板原型;
proto.addChild=函数(键,子项){
this.list.push({key:key,child:child});
};
proto.removeChild=函数(键){
for(var i=0;i
为什么不使用单个数组并使用arr.push({'key':key,'child':child}
)?通过这种方式,您可以确保所有数据始终很好地绑定在一起。但是,JavaScript中没有内置的按插入顺序排列的键值容器。在不同数组中存储键和值似乎很奇怪之后,我就这样做了,让我把它绑定到我的代码中,我会接受:)工作得很好,谢谢:)尽管我使用了
forEach
,再次感谢!
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();
    }
};