簡體   English   中英

使用array.splice時,Undefined不是函數

[英]Undefined is not a function when using array.splice

我試圖從數組中刪除一些元素,並使用splice功能,它也返回這些值。 請參閱以下javascript:

var blocksUsed = allNumbers.splice(0,3);

當試圖運行這一行(與整個函數一起)時,我收到一條錯誤說明如下:

未捕獲的TypeError:undefined不是函數

我花了很長時間在函數中尋找印刷錯誤,但似乎沒有。 我也准備好JQuery是常見的麻煩制造者,但我沒有使用JQuery。

通過改組另一個數組來創建數組(shuffle函數不是我的):

function shuffle(o){
    for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return o;
};

然后我以下列方式使用它:

var allNumbers = shuffle(blocks);

我嘗試記錄allNumbers,它正常工作。 數組被正確洗牌。 然而,嘗試對此進行拼接會產生相同的錯誤。

還要注意我在for循環中進行拼接。 代碼如下。

for (var i = 0; i < 4; i++){

    // Get a block of 3 blocks.
    var blocksUsed = allNumbers.splice(0,3); // This line gives the error.

    // Determine the color used for these blocks and remove it so that it doesn't get drawn again.
    var colorIndex = randomIntFromInterval(0,i);
    var colorUsed = otherColors[colorIndex];
    if(otherColors.indexOf(colorUsed) > -1){
        otherColors.splice(colorIndex, 1);
    }

    // For each block, set the color.
    for(var j = 0; j < 3; j++){
        blocksUsed[j].className = "block " + colorUsed;
    }
}

為什么我不能在這個數組上使用splice 請注意,如果需要,我可以提供整個功能。 我在這個codepen上有完整的功能,可以立即參考。

由於評論:

allNumbers是包含以下列方式接收的元素的數組的混洗版本:

var blocks = document.getElementsByClassName('block');
var blocks = document.getElementsByClassName('block');

那不是一個數組。 這是陣列。 你需要把它變成一個數組。

var elems = document.getElementsByClassName('block');
var blocks = Array.prototype.slice.call( elems, 0 );

blocks不是Array 它是一個NodeList所以你需要使用[].slice.call ,它將采用塊,這是一個類似於數組的結構並返回預期的結果。

var blocksArr = [].slice.call(blocks, 0); 
var blocksUSed = blocksArr.splice(0, 3);

暫無
暫無

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

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