问题描述
我的数字变量通过数学随机性每秒更新到一些数字,例如“ 14323121”,我也希望每秒钟将它们保存到一个数组中,例如最近的10个左右。
function EveryOneSec() {
var numbers = math.Random(); // I want to create an array from this...
setTimeOut(EveryOneSec, 1000);
};
要将“数字”绑定到数组:(请参见上面的var数字)我想创建一个如下所示的数组,例如最近的10个更新?
{"numbers":["2021030213","32454253"]} // For Reigel..
//doesnt have to be key value pairs. just need the value in legit json.
1楼
pr1001
3
已采纳
2010-07-02 07:44:30
您的方法有什么问题? 只需在重复的函数之外设置变量,然后对其进行 。
var numbers = [];
var jsonString = "";
function EveryOneSec() {
numbers.push(Math.random());
jsonString = JSON.stringify({'numbers': numbers});
setTimeout(EveryOneSec, 1000);
}
但是,我认为您的任务可能是使用的绝好机会! 您标记了问题jQuery,因此您应该查看其方法。 当然,有很多关于该主题的 。
var numbers = [];
var aPlaceholder = document.createElement("div");
aPlaceholder.bind("arrayUpdatedEvent", {'numbers': numbers}, arrayUpdatedHandler);
function arrayUpdatedHandler(event) {
var jsonString = JSON.stringify(event.data);
// do something with your JSON
}
function EveryOneSec() {
// add number to array
numbers.push(Math.random());
// trigger custom event
aPlaceholder.trigger("arrayUpdatedEvent");
}
// call every 1 second, store in var to be able to cancel it later
var myInterval = setInterval(EveryOneSec, 1000);
如您所见,这里有很多代码。
但是,引入自定义事件将为您提供强大的功能,因为现在您已经将变量更新与JSON创建分离了。
此外,您可以添加其他侦听器,也许还可以记录更新后的数组,并在数组更新和JSON创建之间插入其他步骤。
例如, EveryOneSec()
可以触发另一个事件verifyArrayEvent
,并且只有在数组验证后,它才会触发arrayUpdatedEvent
。
更新:从注释到问题,似乎Ozaki不清楚他们是否可以在其定时器函数中访问以前定义的变量。 通过在函数外部定义变量,然后在不使用var的情况下在函数内部引用变量,这将创建一个新的局部变量,您将创建一个 ,您可以在函数外部使用对函数内部变量的操作它。 您可能已经注意到,我在两个示例中都使用了这种技术。
希望能有所帮助。
2楼
2
这是一个解决方案:
<html>
<head>
<title>S.O. 3163764</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script type="text/javascript">
// dump() borrowed from http://www.openjs.com/scripts/others/dump_function_php_print_r.php
const REPEAT = 3 * 1000; // ms
const TO_KEEP = 10; // numbers to be kept
var gObject = { 'numbers': [] };
/**
* Function : dump()
* Arguments: The data - array,hash(associative array),object
* The level - OPTIONAL
* Returns : The textual representation of the array.
* This function was inspired by the print_r function of PHP.
* This will accept some data as the argument and return a
* text that will be a more readable version of the
* array/hash/object that is given.
* Docs: http://www.openjs.com/scripts/others/dump_function_php_print_r.php
*/
function dump(arr,level) {
var dumped_text = "";
if(!level) level = 0;
//The padding given at the beginning of the line.
var level_padding = "";
for(var j=0;j<level+1;j++) level_padding += " ";
if(typeof(arr) == 'object') { //Array/Hashes/Objects
for(var item in arr) {
var value = arr[item];
if(typeof(value) == 'object') { //If it is an array,
dumped_text += level_padding + "'" + item + "' ...\n";
dumped_text += dump(value,level+1);
} else {
dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
}
}
} else { //Stings/Chars/Numbers etc.
dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
}
return dumped_text;
}
function everyNSec() {
var number = Math.random();
store(number);
window.setTimeout(everyNSec, REPEAT);
};
function store(aNumber) {
gObject.numbers.push(aNumber);
while (gObject.numbers.length > TO_KEEP)
gObject.numbers.shift();
$("#dump").html(dump(gObject));
}
$(document).ready(function() {
everyNSec();
});
</script>
</head>
<body>
<pre id="dump">
</pre>
</body>
</html>
在Chrome 6.0.447.0开发人员上测试