簡體   English   中英

數組項獲取值“未定義”

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

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