Javascript возвращает неопределенное значение для определенного индекса

Я создал массивы случайных чисел в 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 для чего-то, что кажется определенным.

вы уверены, что он существует в то время, когда вы пытаетесь получить к нему доступ?

pilchard 11.11.2022 23:23

Ваш JS-код не кажется мне действительным.

code 11.11.2022 23:23

Каким должен быть [tag:function?

Barmar 11.11.2022 23:35

Всегда объявляйте свои локальные переменные. Используйте for(let x = ...)

Barmar 11.11.2022 23:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Console.log объекта в браузере обычно показывает содержимое объекта, когда он раскрывается в консоли разработчиков, а не свойства и значения, которые он имел при входе в JavaScript. Другими словами, console.info(object) не делает клонированный снимок object. Однако, если вы не расширите вывод консоли до тех пор, пока не будут прочитаны все файлы, вы увидите значения, сгенерированные из файлов.

С другой стороны, console.info(undefined) немедленно регистрирует «undefined» на консоли.

В опубликованном коде элементы c_file_ асинхронно помещаются в обработчик событий loadend после завершения чтения файла. Однако строка console.info в сообщении вызывается синхронно до того, как какой-либо файл будет прочитан. Следовательно, если вы зарегистрируете значение c_file_[0] в той же позиции, ожидайте увидеть undefined, потому что массив c_file_ все еще пуст.

Спасибо, это сработало, когда я поместил функцию для использования данных внутри основного цикла for, поэтому она была асинхронной с добавляемыми значениями.

Riley Richardson 12.11.2022 02:43

Другие вопросы по теме