2016-08-25 2 views
0

У меня есть массив следующим образом в JavaScript:нагрузки 2d массив из файла в JavaScript

var linePoints = [[0, 3], [4, 8], [8, 5], [12, 13]]; 

Но я хотел бы загрузить это из текстового файла вместо определения его в коде. Файл:

input.txt:

0 3 
4 8 
8 5 
12 13 

Я заметил this other пост, который говорит о чем-то подобным, но для 1D массив. Мне было интересно, есть ли специальная функция для этого для 2D. В java я прочитал каждую строку, а затем разделил ее. Но, честно говоря, я новичок в javascript.

+0

вы с помощью Node.js? – naomik

+0

Не то, что я знаю, я использую его в jquery.flot – dorien

+0

Вы управляете форматом входного файла? – trincot

ответ

3

Это должно делать то, что вы ищете:

$.get("textFile.txt", function(data) { 
     var items = data.split("\r\n").map(function(el){ return el.split(" ");}); 
    }); 

Вот рабочий пример: http://plnkr.co/edit/htsf9yBuygAhv7vznS2g?p=preview

+0

Да, еще один вопрос. Как сделать «элементы» доступными вне этой функции в javascript? Кажется, это только функция jquery. Извините, я новичок в jquery. Есть ли простой способ «вернуть» эту переменную? – dorien

+0

Я попробовал следующее, чтобы адаптировать код для возврата данных в виде переменной. Функция showGetResult (имя, обратный вызов) { data = $ .get (имя, обратный вызов); items = data.split (/ \ r? \ N /). Map (pair => pair.split (/ \ s + /). Map (Number)); возвращенные детали; } var items = showGetResult ("./ moonlight_sonata_diameter.data", function (data) {); – dorien

+0

ОК, с которым мы имеем дело, это асинхронный код, вы можете иметь дело с асинхронным кодом несколькими способами, наиболее распространенными являются обратные вызовы и обещания, есть и другие способы, но они не работают во всех браузерах –

0

Нет встроенной обобщенной функции для синтаксического анализа ввода так, как вы хотите. Однако вы можете воспользоваться функцией String.split(), которая сломает строку в любое число меньших строк на основе разграничителя вы передаете его:

var foo = "0 3"; 
var bar = foo.split(" "); // split based on single space character 
console.log(bar); // ["0", "3"] 
+0

Как насчет разрыва строки? Могу ли я использовать это асинхронно? – dorien

1

вы должны обратить внимание на различные стили новой строки, и вы, вероятно, хотите, чтобы массив иметь номера, а не строк.

Так я предлагаю этот код:

$.get("textFile.txt", function(data) { 
    var items = data.split(/\r?\n/).map(pair => pair.split(/\s+/).map(Number)); 
}); 
Смежные вопросы