开发者问题收集

这个 javascript 有什么问题?myArray 未定义

2021-07-22
89

我想尝试使用 javascript 搜索/过滤 JSON 表数据。 此代码有什么问题?

async function callApi(){
    const res = await fetch('https://reqres.in/api/users/')
    const users = await res.json();

    var myArray = []
    myArray = users.data
    buildTable(myArray)
    console.log(myArray)
}
callApi();
buildTable(myArray);

到目前为止一切都很好,直到 ↓

const search = document.getElementById('search-input');
search.addEventListener('keyup', e => {
    let value = e
    console.log(value)
    let data = filterTable(value , myArray)    // this line throws the error
    buildTable(data)
} );


function filterTable(value , data){
    let filterData = []
    for (var i=0; i < data.length; i++){
        value = value.toLowerCase()
        let name = data[i].name.toLowerCase()

        if (name.includes(value)){
            filterData.push(data[i])
        }
    }
    return filterData;
}

↓ 这是我收到的错误:

Uncaught ReferenceError:myArray 未定义

function buildTable(data){
    let table = document.getElementById('myTable')
    table.innerHTML = ''
    for (var i=0; i < data.length; i++){
        let row = `<tr>
            <td>${data[i].first_name}</td>
            <td>${data[i].last_name}</td>
            <td>${data[i].email}</td>
            </tr>` 
    table.innerHTML += row
    }
}

** 更新 ↓

在我全局定义变量后,我得到了不同的错误

function filterTable(value , data){
    let filterData = []
    for (var i=0; i < data.length; i++){
        value = value.toLowerCase()  //Uncaught TypeError: value.toLowerCase is not a function 
        let name = data[i].name.toLowerCase()

        if (name.includes(value)){
            filterData.push(data[i])
        }
    }
    return filterData;
}

如果我将该错误部分转换为

value = value.toString().toLowerCase()
let name = data[i].name.toString().toLowerCase()

然后我得到 “Uncaught TypeError:无法读取未定义的属性‘toString’”

我是否遗漏了什么概念?

2个回答

您的数组是在函数内部定义的,它不是全局的,因此您无法从其他函数访问它:

async function callApi(){
    const res = await fetch('https://reqres.in/api/users/')
    const users = await res.json();

    var myArray = []        // array is here
    myArray = users.data
    buildTable(myArray)
    console.log(myArray)
}

应该是这样的:

var myArray = []        // array is here

async function callApi(){
    const res = await fetch('https://reqres.in/api/users/')
    const users = await res.json();

    myArray = users.data
    buildTable(myArray)
    console.log(myArray)
}
AlexSp3
2021-07-22

您需要全局定义变量

将其添加到脚本顶部

//variables
var myArray = []
Marsimplodation
2021-07-22