Я создал массивы случайных чисел в Python и прочитал их в Javascript через файлы .txt. Конечным продуктом чтения файлов является трехмерный массив, всякий раз, когда я регистрирую этот массив, я получаю ожидаемый результат, но если я пытаюсь проиндексировать его, возвращается undefined.
document.getElementById('inputfile').addEventListener('change',
function (){
var c_file_=[]
var fr=[];
var blocks=[];
for(x=0;x<this.files.length;x++){
fr.push(new FileReader());
const f=x;
fr[f].readAsText(this.files[f])
fr[f].onloadend=function(){
file=(fr[f].result)
if (file==null){
console.info('read_fail')
c_file_.push(file_[f-1])
}else{
blocks=file.split("\n")
string=[]
for(b=0;b<blocks.length;b++){
string.push(blocks[b].split("], ["))
string[b][0]=string[b][0].replaceAll('[[',"")
string[b][string[b].length-1]=string[b][string[b].length-1].replaceAll(']]',"")
}
values=[]
for(i=0;i<string.length;i++){
values.push([])
for(n=0;n<string[i].length;n++){
values[i].push(parseFloat(string[i][n]))
}
}
c_file_.push(values);
}
}
}
console.info(c_file_)
})
Это то, что регистрируется, если я регистрирую весь массив:
0: (3) [Array(8), Array(4), Array(1)] 1: (3) [Array(8), Array(4), Array(1)] 2: (3) [Array(8), Array(4), Array(1)]
Но если я войду c_file_[0]
, я получу неопределенность.
Я пытался использовать распространение для сопоставления массива, сопоставления массива перед присвоением значений и различных методов клонирования, чтобы избежать утечек памяти. Однако ничто не позволило мне получить доступ к значению конечного массива. Я новичок в javascript, поэтому я могу упустить что-то очевидное здесь, но я не могу понять, что он возвращает undefined для чего-то, что кажется определенным.
Ваш JS-код не кажется мне действительным.
Каким должен быть [tag:function
?
Всегда объявляйте свои локальные переменные. Используйте for(let x = ...)
Console.log объекта в браузере обычно показывает содержимое объекта, когда он раскрывается в консоли разработчиков, а не свойства и значения, которые он имел при входе в JavaScript. Другими словами, console.info(object)
не делает клонированный снимок object
. Однако, если вы не расширите вывод консоли до тех пор, пока не будут прочитаны все файлы, вы увидите значения, сгенерированные из файлов.
С другой стороны, console.info(undefined)
немедленно регистрирует «undefined» на консоли.
В опубликованном коде элементы c_file_
асинхронно помещаются в обработчик событий loadend
после завершения чтения файла. Однако строка console.info
в сообщении вызывается синхронно до того, как какой-либо файл будет прочитан. Следовательно, если вы зарегистрируете значение c_file_[0]
в той же позиции, ожидайте увидеть undefined
, потому что массив c_file_
все еще пуст.
Спасибо, это сработало, когда я поместил функцию для использования данных внутри основного цикла for, поэтому она была асинхронной с добавляемыми значениями.
вы уверены, что он существует в то время, когда вы пытаетесь получить к нему доступ?