这个 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