簡體   English   中英

創建一個數組並檢查它

[英]Create an array and check against it

我不確定如何執行此操作,但是我想執行的操作將創建一個數組並能夠向該數組添加新項目。 由於項目應該是隨機數,因此在創建新實例時,我希望對照數組的其余部分對其進行檢查,並確保它生成的數字不在數組中。 我將如何完成這樣的事情?


我看着Š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;

而且我不明白為什么這行不通。 它做的差不多一樣,對嗎?

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時is(a, n)該數字才添加到數組中。


更新

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

如果您喜歡快速代碼,並且數組中有很多項目,則應使用對象而不是數組。

而不是做var my_array=[]; my_array.push(my_number) var my_array=[]; my_array.push(my_number) ,使用var my_object = {}; my_object[my_number] = true 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); , 或多或少。

var array = []

array[0] = 'Item'

array[0] === undefined
# returns false

array[1] === undefined
# returns true

最快,最跨瀏覽器的方法是使用循環來遍歷數組:

var arr = [];

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

在運行循環之前,請確保獲取數組的長度,以便不會經常檢查length屬性。

您可以根據需要擴展內置的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM