我對這個有點困惑。我的代碼如下所示:
let matches = code.matchAll(/regex pattern/g);
if (!Array.from(matches).length) {
matches = code.matchAll(/regex alt pattern/g);
if (!Array.from(matches).length) return;
}
console.log(Array.from(matches));
我的目標是檢查模式,如果沒有找到,請檢查替代模式。如果還沒有找到,我想回傳,否則,我會用它做一些作業。
我的問題是Array.from(matches)由于某種原因消耗matches. 假設第一個正則運算式模式回傳一個結果。if 陳述句將被正確跳過,但控制臺日志將列印出一個空陣列。什么都沒有matches。替代正則運算式也是如此。如果我檢查那個提前回傳,matches將再次為空。但是,如果我將其注釋掉,則該控制臺日志具有非空陣列。
根據MDN,Array.from()應該是做一個淺拷貝。為什么它會抹掉那個參考?
uj5u.com熱心網友回復:
如果你閱讀了關于 .matchAll() 回傳內容的 MDN 檔案,它是一個不可重啟的迭代器。所以,你說 Array.from() 會消耗它是正確的,你顯然不能再次使用那個迭代器。
因此,執行Array.from(matches)一次并將其保存到變數中,這樣您就不會嘗試多次使用可迭代物件。這是一種方法:
let matches = Array.from(code.matchAll(/regex pattern/g));
if (!matches.length) {
matches = Array.from(code.matchAll(/regex alt pattern/g));
if (!matches.length) return;
}
console.log(matches);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/384849.html
標籤:javascript 节点.js 数组
上一篇:如何使用js過濾表中ul的li?
下一篇:復制陣列的某些元素將不起作用
