我正在尝试为基于Ajax的Web应用程序建立键/值关系。我决定使用基于纯数组的方法,因为迭代数组比objs快(或者有人告诉我)。

这个想法的基础是这样的:

var keyVals = [
    [ "key1", ["value1"] ],
    [ "key2", ["value2"] ],
];


但是,当我迭代数组以删除/设置或更改键时,该事件未按预期运行:

例如:

console.log(keyVals);

function delKeyPair(key) {
    for (var i = 0; i < keyVals.length; i++) {
        if (keyVals[i][0] && keyVals[i][0] === key) {
            Array.prototype.splice.call(keyVals, i, 1);
            return true
        }
    }
    return false
};

delKeyPair("key1");
console.log(keyVals);


当我第一次使用console.log()数组时,它表明在调用函数之前“ key1已被删除。

这是一个小提琴,不太确定发生了什么。任何帮助深表感谢。
http://jsfiddle.net/3pfj8927/

最佳答案

key1尚未在调用函数之前被删除:

尝试console.log(keyVals.length);

DEMO

输出:

Length before deleting: 2
Length after deleting: 1

09-26 22:32