Неудачное преобразование строки в int в JavaScript

0

Я пытаюсь получить вход из массива строк 2d php и преобразовать значения в arr [i] [1] (где я можно рассматривать как строку и 1 как столбец в матрице) до целого числа следующим образом:

Функция JavaScript:

var _input = <? php echo json_encode($output); ?> ; //2D String
var _sro = []; //string
var _src = []; //string
var _sru = []; //string

var aL = _input.length;
for (var i = 0; i < aL; i++) {
  _sro.push(_input[i][0]); //string
  _src.push(_input[i][1]); //string
  _sru.push(_input[i][2]); //string
}

alert(_src.toString()); //result = 1,1,2,9,6,1,24...
alert(typeof(_src).toString()); //res = string

var _lb = new Array(); //empty
var _dt = new Array(); //empty

for (var i = 0; i < aL; i++) {
  _dt.push(parseInt(_src[i])); //convert to int and push to arr
}

alert(_dt.toString()); //result = NaN,NaN,NaN,NaN.....
alert(typeof(_dt).toString()); //res = string

_lb = _sro;

Проблема, которую я испытываю, заключается в том, что конечный вывод для каждого значения _dt равен NaN, что означает, что он не преобразуется соответствующим образом. Чтобы решить эту проблему, я попытался:

  1. используя parseInt
  2. используя Number()
  3. используя оператор "+"
  4. используя как parseInt, так и Number()

Например:

for (var i = 0; i < aL; i++) {
  _dt.push(Number(parseInt(_src[i]))); //convert to int and push to arr
}

и все это потерпело неудачу. Я действительно потерян, и у меня кончились идеи после двух дней поиска в Интернете, и, возможно, кто-то из их мудрости сможет помочь, за что спасибо заранее.

РЕДАКТИРОВАТЬ:

PHP Функция:

функция ниже генерирует массив PHP, переданный в JS:

//set error reporting
error_reporting(E_ALL & ~E_NOTICE);

//set variables
$result = array();
$output = array();

//read in csv file
foreach(file("1OnScreen.csv") as $key => $str) {
  if ($key == 0)
    continue; // skip first line

  $values = str_getcsv($str, "\t", '', '');
  $result[] = $values;
}
$output = $result;

CSV DATA

Файл CSV содержит следующие данные, а разделитель -\t:

Owner	Count	Unassigned	Other
AA1	1	0	1
AD	1	0	1
AR	2	0	2
BW	9	0	9
CM	6	0	6
CT	1	0	1
DB	24	0	24
EU	8	0	8
GM	5	0	5
GO	21	0	21
JF	1	0	1
JW	2	0	2
NH	10	0	10
RB	2	0	2
SPC	4	0	4
SP	2	0	2
TC	2	0	2
TG	1	0	1
VS	4	0	4

Выход JSON в JS Вывод _input когда я вижу его при запуске alert(_input) я думаю, что запятая в начале новых строк может повлиять на преобразование и заставить его выйти из строя, но я не знаю, как обойти это.

AA1,1,0,1
,AD,1,0,1
,AR,2,0,2
,BW,9,0,9
,CM,6,0,6
,CT,1,0,1
,DB,24,0,24
,EU,8,0,8
,GM,5,0,5
,GO,21,0,21
,JF,1,0,1
,JW,2,0,2
,NH,10,0,10
,RB,2,0,2
,SPC,4,0,4
,SP,2,0,2
,TC,2,0,2
,TG,1,0,1
,VS,4,0,4
  • 0
    Вы уверены, что _src[i] является правильно отформатированной строкой? Попробуйте for (var i = 0; i < aL; i++) { _dt.push(parseInt(_src[i].toString())); }
  • 1
    Можете ли вы предоставить массив _input как переменную javascript, а не как встроенный скрипт php?
Показать ещё 6 комментариев
Теги:
csv
arrays
type-conversion

1 ответ

0
Лучший ответ

Преобразование не выполняется из-за определенных специальных символов в строке JSON, переданных из скрипта PHP, и "Если первый символ не может быть преобразован в число, parseInt() возвращает NaN". Источник W3C

Чтобы разрешить неудачное преобразование или, скорее, предотвратить его использование, полезно использовать регулярные выражения (учебник по регулярному выражению, доступный здесь) приведет к замене всех символов, кроме 1-9 (по этому вопросу), таких как: /[^1-9 ]/g при попытке преобразовать строку в число, так что полный код выглядит следующим образом:

var _srOwner = <? php echo json_encode($sro_o); ?> ;
var _srCount = <? php echo json_encode($src_o); ?> ;
var _srUnassigned = <? php echo json_encode($sru_o); ?> ;

var _srC = [];
var _srU = [];


var aL = _srCount.length;
var cs = "";
var us = "";
var csi = "";
var usi = "";
var cn = 0;
var un = 0;
for (var i = 0; i < aL; i++) {
  cs = String(_srCount[i]); //string
  us = String(_srUnassigned[i]); //string
  csi = cs.replace(/[^1-9]/g, ""); //string
  usi = us.replace(/[^1-9]/g, ""); //string
  cn = parseInt(csi);
  un = Number(usi);
  _srC.push(cn);
  _srU.push(un);
};

где преобразование с использованием как parseInt() и Number() выполняется успешно, и вы можете использовать этот вопрос в качестве руководства для которого выбрать.

Особая благодарность @dirluca за вклад в этот вопрос и большие указатели.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню