查找函数或循环中的
Lookup function or for in loop?
使用查找函数在数组中查找具有特定ID的对象,还是仅使用数组中有孔的for in loop,哪一个对性能更好?
在我的情况下,我的球员阵列是动态的。假设3个玩家连接在一起,所以我的阵列看起来像这样:
players = [player1, player2, player3]
将数组密钥作为玩家ID很容易,这样我就知道ID为2的玩家在玩家数组中排名第三,为了访问他,我只需要使用:players[2]
,但当第二个玩家离开时,他会创建一个数组洞:
players = [player1,,player3]
据我所知,这个洞会降低使用数组的性能,因为我经常在循环中使用,所以有一个玩家对象的数组,而不是留下数组洞,我只是把洞拼接出来会更好吗?但通过这种方式,我将无法将数组键作为玩家ID,所以我必须使用ID查找功能。那么,最终这两种选择中哪一种对性能更好呢?或者还有更好的方法来解决这个问题?
谢谢!
在我看来,@Jaromanda X在评论中提到的选项是最好的,因为"洞的实现"会变得越来越慢,尤其是在迭代播放器阵列时,因为当你不断添加和删除播放器时,箭头会变长,变得非常稀疏,主要由洞组成。
var players = {};
players[p.id] = p; // add player p
delete players[p.id]; // remove player p
// player ids have to be unique and should be strings
这就是为什么查找不是一个好主意,首先我认为这可能很容易,但实际上这段代码失败了,因为你必须在删除播放器后更新所有索引。。。所以最好还是以球员为对象。
// ATTENTION: example of FAILING implementation
var players = [];
var map = {};
// add player p
var idx = players.push(p) - 1;
map[p.id] = idx;
// remove player p
players.splice(map[p.id], 1);
delete map[p.id];
使用
var players = {
abc1: player1,
abc2: player2,
abc3: player3
}
代替var players = [player1, player2, player3]
现在您可以通过players.abc1.name = "Nicholas"
访问它,不需要查找功能。如果你只使用ID以有组织的方式查找每个玩家,我建议你使用一种更简单的方法:
var players = {
player1: player1,
player2: player2,
player3: player3
}
通过这种方式,您可以更容易地访问它,如players.player1[madeUpPropName] = someValue
;
此外,您永远不应该在数组的循环中使用我们。使用forEach或基本的for循环。为什么使用";对于在";数组迭代是个坏主意吗
您可以使用console.time(str)
和console.timeEnd(str)
轻松检查性能。使用以下示例进行检查:
var array = ['player1', 'player2', 'player3'];
// Test using indexOf
console.time('test1');
var val = array.indexOf('player3');
console.timeEnd('test1');
// Test using a for loop
console.time('test2');
for (var i in array) {
if (i == 'player3') {
break;
}
}
console.timeEnd('test2');
请注意time
和timeEnd
中的字符串是如何匹配的。
- JavaScript/Jquery:一个特殊用途的for循环函数
- 为循环函数中的元素指定单击
- Jquery下一个和上一个按钮循环函数
- 循环函数(Javascript回调帮助)
- 循环函数不起作用
- 使用ajax调用循环函数
- 在Javascript中修改循环函数的参数
- 如何循环函数数组并在单击时一次执行一个
- 设置超时可以保存我的循环函数不被视为无响应
- 具有超时的循环函数
- j查询如何在一系列延迟后循环函数
- 如何将 JavaScript forEach 循环/函数转换为 CoffeeScript
- for 循环函数似乎未运行
- 对于内部循环函数(新手)
- 循环函数会导致它在 javascript 中无响应
- 循环函数
- 如何优化循环函数
- JS拒绝循环函数
- 中断循环函数
- 在 JavaScript 中循环函数可以吗?