循环使用Javascript中的数据,将新ID与旧ID相结合

时间:2010-06-29 21:10:20

标签: javascript jquery

很多时候我不得不循环访问数据并将新内容添加到旧版本中,但我似乎永远无法做到正确。这就是我现在所拥有的,基本上是尝试将新编号中的前一个数字合并在一起,最终建立逗号分隔的数字串:

            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);

3 个答案:

答案 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