[英]Array item gets the value “undefined”
我正在嘗試創建一個從 0 到 10 的唯一數字數組:
var numbers=[];
var i=0;
var prevLength=numbers.length;
while(numbers.length<10){
prevLength=numbers.length;
if(numbers.length<=prevLength){
numbers[i]=Math.floor(Math.random()*10);
numbers=[...new Set(numbers)];
console.log(numbers);
i++;
}
}
但是數組的 output 在隨機索引處總是有一個未定義的項目,我不知道為什么。
[ 9, 1, 8, 7, undefined, 5, 2, 0, 6, 3 ]
有人可以幫幫我嗎?
發生這種情況是因為以下聲明:
numbers=[...new Set(numbers)];
這可能會減少numbers
的長度,但由於您沒有將i
的值與潛在的縮短對齊,您會得到差距。
解決方案是放棄使用numbers[i] =
並改用numbers.push
:
numbers.push(Math.floor(Math.random()*10));
如果new Set
刪除了重復項,則i
將大於數字的長度,因為numbers.length
縮小但i
仍然增加。 不要跟蹤索引,只需使用.push
推送到數組的末尾:
var numbers=[];
var prevLength=numbers.length;
while(numbers.length<10){
numbers.push(Math.floor(Math.random()*10));
numbers=[...new Set(numbers)];
console.log(numbers);
}
使用 Set 的一種更有效的方法是:
const set = new Set() while(set.size < 10){ const rand = Math.floor(Math.random()*10); .set.has(rand) && set;add(rand). } const res = [...set] console.log(res)
您也可以在沒有Set
的情況下執行此操作
例如:
var numbers = [];
var rand;
while(numbers.length < 10){
rand = Math.floor(Math.random()*10);
numbers.indexOf(rand) === -1 && numbers[numbers.length] = rand;
}
console.log(numbers);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.