亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

數組顯示為空,但應該有一個元素

數組顯示為空,但應該有一個元素

LEATH 2022-10-21 10:37:56
好的,伙計們,我在我一直在處理的一些代碼上遇到了問題。在下面的代碼中,我試圖通過控制臺記錄數組的長度,但是在打印到控制臺后,我得到數組長度的輸出 0,當我打印數組本身時,它顯示它是空的,但我可以單擊下拉箭頭并查看其中的元素。// randomly selects card from arrayexport const selectCard = arr => {    const randomArr = Math.floor(Math.random() * arr.length);    console.log(arr.length);    console.log(arr);}記錄數組長度和內部包含元素的空數組的圖像。為了測試發生了什么,我決定將數組記錄在一個不同的函數中,該函數位于創建數組的同一文件中。數組 ( blackCards) 存儲在一個對象中。let packArr = {  data: {},  packToUse: [],  whiteCards: [],  blackCards: [],};blackCards控制臺在另一個函數中記錄數組 ( ) 會記錄以下內容:const seperatePacks = (data) => {  // add white cards to array  packArr.whiteCards.push(data.whiteCards);  // add black cards to array  packArr.blackCards.push(data.blackCards);  // console log blackCards array  console.log(packArr.blackCards);};來自不同函數的記錄數組的圖像,該函數位于創建和存儲數組的同一文件中。這里有更多關于我的代碼如何工作的信息。當用戶單擊按鈕時,將激活一個事件偵聽器,該偵聽器調用最終從服務器獲取 json 的其他函數,然后我將該數據添加到數組中,您可以在上面的代碼中看到。因此,既然您知道代碼是如何工作的,那么我就可以了解導致我更加困惑的原因。所以,在第一次點擊時,我得到了所有先前代碼和圖像組合的結果,但是如果我再次點擊同一個按鈕,或者點擊不同的按鈕,我會得到想要的結果(如果我點擊兩個按鈕我得到數組中的兩個元素,所以它工作正常)。因此,單擊兩次或多次,程序就會按應有的方式運行。這里的任何幫助都會很棒。如果這篇文章有點磨損也很抱歉,這是我的第一篇。以下是最終調用的函數selectCardelements.packs.addEventListener("click", (e) => {  const packID = e.target.closest(".pack").id;  if (packID) {    packsToUse(packID);    // create black cards    blackCardDisplay(packArr.blackCards);  }});上面是前面提到的監聽器,它調用下面的函數,它會調用selectCard.export const blackCardDisplay = data => {    const card = `        <div class="cards card--black">            <h1 class="card--black-text card--text">${selectCard(data)}</h1>        </div>    `;}這是按下兩個按鈕后的輸出。該數組應該包含兩個元素,但在這種情況下它只顯示一個。但是,當我展開數組時,它顯示的長度為 2 而不僅僅是 1。單擊兩次按鈕的控制臺圖像編輯:在閱讀了一些評論后,我意識到我忘了提到的內容blackCards是一個數組。所以我在一個數組中有一個數組。
查看完整描述

1 回答

?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

因此,在閱讀了一些評論后,我決定實施@charlietfl 的評論,即數組可能在 ajax 調用完成之前被控制臺記錄。雖然這并沒有明確解決問題,但它讓我走上了解決方案的正確軌道。


這是我解決這個問題的方法:


我接受了關于在 ajax 調用完成之前完成控制臺日志的評論,并從那里進行了一些研究,發現了這篇非常簡單的文章:


https://www.programmersought.com/article/26802083505/


在這篇文章中是一個使用該setTimeout()方法的例子。


這是我的問題的最終解決方案。


export const selectCard = arr => {

    const randomArr = Math.floor(Math.random() * arr.length);


    setTimeout(() => {

        console.log(arr.length);

        console.log(arr)

    }, 1000);

}

這是在setTimeout()第一次按下按鈕時添加方法后的輸出。


解決的數組長度和數組控制臺日志的圖像

我不知道這是否是該問題的最佳解決方案,因為過去我看到有些人不贊成使用這種方法,但它對于我目前正在做的事情來說效果很好。如果有人有更好的方法來解決這個問題,我很想聽聽!


查看完整回答
反對 回復 2022-10-21
  • 1 回答
  • 0 關注
  • 216 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號