【发布时间】:2018-07-07 04:46:00
【问题描述】:
让我先说这不是我通常会做的事情,但出于好奇,我会看看是否有人对如何处理此类问题有好的想法。
我正在开发的应用程序是游戏Let's make a Deal 的模拟示例,其中包含蒙蒂霍尔问题。
我不会详细介绍我的实现,但它或多或少允许用户输入他们想要模拟的游戏数量,然后如果关闭某个选项,那么这些 x 游戏的玩家不会切换他们的选择,而如果打开它,他们会在游戏的每个实例中切换他们的选择。
我的对象生成器如下所示:
const game = function(){
this[0] = null;
this[1] = null;
this[2] = null;
this.pick = Math.floor(Math.random() * 3);
this.correctpick = Math.floor(Math.random() * 3);
this[this.correctpick] = 1;
for (let i=0; i<3; i++){
if ((this[i] !== 1) && (i !== this.pick)){
this.eliminated = i;
break;
}
}
}
const games = arg => {
let ret = [];
for(let i=0; i<arg; i++){
ret.push(new game);
}
return ret;
}
这个结构会生成一个数组,我稍后会对其进行字符串化,如下所示:
[
{
"0": 1,
"1": null,
"2": null,
"pick": 2,
"correctpick": 0,
"eliminated": 1
},
{
"0": null,
"1": null,
"2": 1,
"pick": 2,
"correctpick": 2,
"eliminated": 0
}
]
游戏的构造函数看起来很草率,原因是我已经将它重构为尽可能少的函数调用,现在我实际上只在当前时间调用数学函数(我删除了任何帮助函数使代码更易于阅读,以提高性能)。
这个应用程序可以在浏览器和节点(跨平台)中运行,但我已将用户可以传递到游戏功能的 arg 限制为 500 万。超过这个时间,进程(或窗口)就会冻结超过几秒钟,甚至可能崩溃。
如果用户提供大量数据,我还能做些什么来提高性能?另外,如果您需要更多信息,我很乐意提供!
谢谢!
【问题讨论】:
-
是否有可能将它们的属性粉碎到不同的数组/映射中?
-
如果您不使用符合 JSON 的字符串,请不要使用术语 JSON。
-
“这个结构会生成一些 json 数据......” 扩展 Nina 的评论:不,它没有。它生成一些 JavaScript 对象。 JSON 是一种用于数据交换的文本表示法。 (More here.) 如果您正在处理 JavaScript 源代码,而不是处理 字符串,那么您就不是在处理 JSON。
-
抱歉,稍后在我的代码中我使用 JSON.stringify(simulation),其中模拟是您在上面看到的数据结构。
-
@simon 为什么不
i那么???
标签: javascript object