JavaScript在数组内迭代数组的意外行为
JavaScript Unexpected Behaviour iterating arrays inside arrays
我正试图为一个基于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);
演示
输出:
Length before deleting: 2
Length after deleting: 1
控制台异步运行。它还保留了对对象的引用。
您的代码运行良好。
当您在控制台中查看对象时,它会显示它的当前外观,而不是日志时的样子。
如果用console.log(keyVals.slice());
替换console.log(keyVals);
,您应该看到正确的对象,因为我们按原样复制它们。
key1尚未删除。请注意,您正在处理给定数组的引用。如果您检查数组,它将由引用加载。因为您正在更改delKeyPair函数中的引用,所以似乎从来没有key1。
如果你在删除时复制数组,你会看到一切都像预期的那样。
相关文章:
- 意外结果,在 ASP.Net 中解析 JSON 对象的数组
- Javascript 数组反向函数意外行为
- 使用变量初始化数组:意外的令牌 +
- 在 JS 中短路空数组会产生意外结果:“[] ||真 == []'
- 推入数组会产生意外的结果
- JavaScript在数组内迭代数组的意外行为
- JavaScript数组-意外的令牌
- JavaScript:推送到空数组中的意外行为
- 意外的类型错误 - Javascript,多维数组
- 在用数组填充初始化的数组上使用数组映射的意外行为
- 切换句柄多维数组.意外结果
- 随后的多维数组排序会产生意外的结果
- 将数组项用作对象中的键时出现意外的令牌错误
- 从数组中拼接出意外的元素
- JavaScript中2D数组的值发生意外更改
- JavaScript 二维数组填充中的意外输出
- 将字段插入子文档数组中.意外行为
- AngularJS分析JSON数组对象意外的令牌:
- 意外标记d'当尝试将对象添加到Javascript对象数组时
- 传递对象数组-意外令牌[