很多时候我不得不循环访问数据并将新内容添加到旧版本中,但我似乎永远无法做到正确。这就是我现在所拥有的,基本上是尝试将新编号中的前一个数字合并在一起,最终建立逗号分隔的数字串:
function showItems(){
if(prev_numbers == undefined){
var prev_numbers = '';
}else{
prev_numbers = prev_numbers;
}
numbers = Math.floor(Math.random()*101);
values = numbers +','+ prev_numbers;
// Here is where some code would be that makes use of comma delimited numbers
alert(values);
prev_numbers = values;
}
setInterval(showItems, 1000);
答案 0 :(得分:0)
为什么不使用Array.join方法?
var numbers = [1, 2, 3, 4, 5];
values = numbers.join(',');
目前尚不清楚这些数字的来源。也许发布一些代码。
您似乎将历史记录存储为以逗号分隔的字符串,并在字符串出现时将新数字添加到字符串的开头。
通常,将数字存储为数字数组会更有意义,然后根据需要使用join来构建字符串以进行显示。你可以使用unshift前缀到数组:
numbers.unshift(Math.random() * 100);
实际上,即使id是字符串,我也会推荐这个。
答案 1 :(得分:0)
正如meder所说,你需要在prev_numbers
之外定义showItems
,或者通过将它们引用为window
的属性来指定它们(替换prev_numbers
by window.prev_numbers
)。也就是说,如果你再次拆分字符串以访问单独的数字,harpo的解决方案会更快很多。我们需要更多地了解上下文以及您的优先级(速度?内存?代码长度?可维护性?)。
顺便说一下,这个
if(prev_numbers == undefined){
var prev_numbers = '';
}else{
prev_numbers = prev_numbers;
}
据我所知,完全没用。它可能会改变prev_numbers
的内部表示,但是对于像JIT这样的复杂事情,我不确定它是否仍然存在。无论如何,您的申请似乎并不感兴趣。据我所知,这段代码可以删除。
答案 2 :(得分:0)
您需要做的是实施memoize技术,即您需要一个记事本功能。
以下是Google为JS memoize implementation提出的建议。
你做得对,只是忽略了这些函数作为JS中的类型实现 - 它是first-class object,所以这些是完全有效的语句:
function a() { };
a.foo = 'bar';
a.hasOwnProperty('foo'); // true
a.foo; // 'bar'
a = function { this.foo = 'bar' }
a.foo; // 'bar'
a['foo']; // 'bar', because objects are implemented as dictionaries
您唯一需要更改的是将prev_numbers
设置为showItems
的属性:
function showItems() {
// bool check for undefined object properties returns false
if(!this.prev_numbers)
this.prev_numbers = '';
numbers = Math.floor(Math.random()*101);
this.prev_numbers = numbers + ',' + this.prev_numbers;
}
至于您在代码中始终接收ReferenceError
的特定问题,我不知道具体的实现细节,但我观察到访问未定义的全局变量将引发ReferenceError
而不是简单地返回{{ 1}},正如你所期望的那样。这是如何妥善处理它:
undefined
看看这个:
if (hasOwnProperty('prev_numbers') { ... }
// equivalent to
if(window.hasOwnProperty('prev_numbers') { ... }
调用baz; // ReferenceError
hasOwnProperty('baz'); // false
window.hasOwnProperty('baz') //false
baz = 'bar';
hasOwnProperty('baz'); // true
window.hasOwnProperty('baz) // true
的替代方法是:
hasOwnProperty