我的陣列有問題讓我先解釋一下我希望你們看到我的代碼在同一頁面上
注意:此示例代碼(非完整版)
代碼:
let checked = []
$.get("https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&page=1&per_page=5", status => { createDiv(status, checked)})
function createDiv(status, checked) {
$(".checkbox").click(function (e) {
if (!checked.some(i => i.id.includes($(this).attr('id'))) && checked.length < 3) {
checked.push({
id: $(this).attr('id'),
})
} else if (checked.some(i => i.id.includes($(this).attr('id')))) {
checked = checked.filter(function (a) { return a.id != `${$(e.target).attr('id')}` })
}})}
因此,當我單擊選中時,它會推送到陣列物件,如果我單擊同一個選中的按鈕,它會過濾陣列,因為它已經在陣列中。
問題是陣列let checked = []只在函式內部更新,這意味著如果我checked在函式內部的console.log陣列過濾得很好,但如果我checked在陣列外部的console.log沒有更新
我怎樣才能在函式之外更新陣列
我希望你們為我提供解決方案:)
uj5u.com熱心網友回復:
您在函式頭中宣告了已簽入。所以檢查存在于本地范圍內。我認為如果您將第一個檢查的內容從let checked = []to更改為var checked = []并洗掉checkedin 函式頭,它應該可以作業。
var checked = []
function createDiv(status) {
$(".checkbox").click(function (e) {
if (!checked.some(i => i.id.includes($(this).attr('id'))) && checked.length < 3) {
checked.push({
id: $(this).attr('id'),
})
} else if (checked.some(i => i.id.includes($(this).attr('id')))) {
checked = checked.filter(function (a) { return a.id != `${$(e.target).attr('id')}` })
}})}
uj5u.com熱心網友回復:
陣列將在外部更新,因為它是對陣列的參考。這里的問題是您必須在單擊后獲取陣列的資料。這意味著您必須在單擊函式的回呼中獲取資料。因為這是異步的,所以如果你想要資料是點擊后的資料,你只能在回呼函式中獲取資料。
let checked = []
$.get("https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&page=1&per_page=5", status => { createDiv(status, checked)})
function createDiv(status, checked) {
$(".checkbox").click(function (e) {
if (!checked.some(i => i.id.includes($(this).attr('id'))) && checked.length < 3) {
checked.push({
id: $(this).attr('id'),
})
} else if (checked.some(i => i.id.includes($(this).attr('id')))) {
checked = checked.filter(function (a) { return a.id != `${$(e.target).attr('id')}` })
}
console.log(checked);})}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/395222.html
標籤:javascript 查询 数组 目的 筛选
