[英]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.