创建一个数组并检查它

时间:2011-01-26 01:51:31

标签: javascript arrays random numbers

我不知道如何做到这一点,但我想做的是创建一个数组,并能够向这个数组添加新项目。由于这些项应该是一个随机数,所以当创建一个新实例时,我希望它与数组的其余部分进行检查,并确保它生成的数字不在数组中。我将如何完成这样的事情?


我看了ŠimeVidas的回答,似乎有效,但我试图将其缩短为

var arr = []; 

function add(a) {
var n =  ~~(Math.random() * 100);
for (var i = 0; i < a.length; i++) {
    if ( a[i] === n) { a.push(n) }
}

}

for (var i=0; i<5; i++){
    add(arr)
}

document.getElementById('output').innerHTML += arr;

我不明白为什么这不起作用。它几乎完全相同,对吗?

5 个答案:

答案 0 :(得分:5)

var arr = []; 

function add(a) {
    var n =  ~~(Math.random() * 1000);
    !is(a, n) && a.push(n);
}

function is(a, n) {
    for (var i = 0; i < a.length; i++) {
        if ( a[i] === n ) { return true; }
    }
    return false;
}

add函数创建一个0到1000之间的随机整数,并将其添加到数组中 is函数检查n数字是否在a数组中的某个位置。

演示: http://jsfiddle.net/kHhMp/2/

演示2: http://jsfiddle.net/kHhMp/3/

(演示2显示一个数字只会添加到数组中,如果它尚未包含在数组中。)


顺便说一句

!is(a, n) && a.push(n);

是这方面的简短形式:

if ( is(a, n) == false ) { a.push(n); }

仅当is(a, n)返回false时,才会将数字添加到数组中。


<强>更新

var arr = []; 

function add(a) {
    var n =  ~~(Math.random() * 1000),
        ok = true;

    for (var i = 0; i < a.length; i++) {
        if ( a[i] === n ) { ok = false; }
    }

    ok && a.push(n);
}

答案 1 :(得分:2)

如果您喜欢快速代码并且阵列中有许多项目,则应使用Object而不是Array。

不要使用var my_array=[]; my_array.push(my_number),而是使用var my_object = {}; my_object[my_number] = true在您的结构中添加项目。

通过这种方法,您可以使用if (my_object[my_number]) { /* already there */ } else { /* not there yet */ }

轻松检查新号码是否已经存在

完成后,您可以使用var keys = Object.keys(my_object),或者如果不可用,var keys=[],i=0;for (keys[i++] in my_object);,或多或少,将数字列表提取为数组。

答案 2 :(得分:1)

var array = []

array[0] = 'Item'

array[0] === undefined
# returns false

array[1] === undefined
# returns true

答案 3 :(得分:1)

最快,最跨浏览的方式是使用循环迭代数组:

var arr = [];

function addNum(num) {
    for (i = 0, len = arr.length; i < len; i++) {
        if ( arr[i] === num ) { return false; }
    }
    arr.push(num);
} 

确保在运行循环之前获取数组的长度,以便不经常检查length属性。

答案 4 :(得分:1)

您可以根据需要扩展内置的Array对象。

Array.prototype.pushUnique = function(value) {
  var len = this.length;
  for(var i = 0; i < len; i++) {
    if(this[i]===value) return;
  }
  this.push(value);
}

var uniques = new Array();
uniques.pushUnique(1);
uniques.pushUnique(2);
uniques.pushUnique(1);
// array will contain only 1 and 2