Проблема
У меня есть Multidimensional Array
и функция с именем conversion()
.
let variables outside conversion()
будет выполняться только в каждой другой ячейке
let variables inside conversion()
работает правильно, но вы должны вводить одну и ту же переменную в каждую новую функцию
Что я ищу?
Я хотел бы знать, почему это происходитЕсли бы я знал, почему, то я могу решить проблемуНо на данный момент я не знаю, почему
Работает ... Вроде
Выполняет функцию только в каждой другой ячейке
let MDA = [
[ '','','UndefineD','nuLL','trUe','fAlsE','TruE','FalSe','NaN','NAN'],
[ '1', '2', '3', '4', '5', 'TRUE', 'FALSE', '8', '9', '10' ],
[ 'a', 'TrUe', 'FaLsE', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ]
],
regComma = /\b(,")(.*?(?:(?!\b,".*",).)*)(",)/g,
regNumber = /^((\s+)?((-)|\.)?)?[\d\.]+(\s+)?$/g,
regBoolean = /^(\s+)?(true|false)(\s+)?$/gi,
regUndefined = /^(\s+)?(undefined|null)(\s+)?$/gi,
regNaN = /^(\s)?nan(\s)?$/gi;
function conversion(str) {
if (regNumber.test(str)) {return parseInt(str);}
if (regBoolean.test(str)) {return /t/i.test(str)?true:false;}
if (regUndefined.test(str)) {return /d/i.test(str)?undefined:null;}
if (regNaN.test(str)) {return NaN;}
return str;
}
for(var i = 0; i < MDA.length; i++) {
let cube = MDA[i];
for(var j = 0; j < cube.length; j++) {
let cell = cube[j],
convert = conversion(cell);
MDA[i][j] = convert;
}
}
console.log(MDA)
Правильно работает
Неэффективно из-за необходимости писать переменныев каждую функцию, которую я хочу предварительно в каждой ячейке.
let MDA = [
[ '','','UndefineD','nuLL','trUe','fAlsE','TruE','FalSe','NaN','NAN'],
[ '1', '2', '3', '4', '5', 'TRUE', 'FALSE', '8', '9', '10' ],
[ 'a', 'TrUe', 'FaLsE', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ]
];
function conversion(str) {
let regComma = /\b(,")(.*?(?:(?!\b,".*",).)*)(",)/g,
regNumber = /^((\s+)?((-)|\.)?)?[\d\.]+(\s+)?$/g,
regBoolean = /^(\s+)?(true|false)(\s+)?$/gi,
regUndefined = /^(\s+)?(undefined|null)(\s+)?$/gi,
regNaN = /^(\s)?nan(\s)?$/gi;
if (regNumber.test(str)) {return parseInt(str);}
if (regBoolean.test(str)) {return /t/i.test(str)?true:false;}
if (regUndefined.test(str)) {return /d/i.test(str)?undefined:null;}
if (regNaN.test(str)) {return NaN;}
return str;
}
for(var i = 0; i < MDA.length; i++) {
let cube = MDA[i];
for(var j = 0; j < cube.length; j++) {
let cell = cube[j],
convert = conversion(cell);
MDA[i][j] = convert;
}
}
console.log(MDA)
Что я пробовал
Поместил let
переменные снаружи conversion()
Созданы новые let
переменные, на которые ссылаются внешние переменныеНо это работает только на каждой другой ячейке
let MDA = [
[ '','','UndefineD','nuLL','trUe','fAlsE','TruE','FalSe','NaN','NAN'],
[ '1', '2', '3', '4', '5', 'TRUE', 'FALSE', '8', '9', '10' ],
[ 'a', 'TrUe', 'FaLsE', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ]
],
regComma = /\b(,")(.*?(?:(?!\b,".*",).)*)(",)/g,
regNumber = /^((\s+)?((-)|\.)?)?[\d\.]+(\s+)?$/g,
regBoolean = /^(\s+)?(true|false)(\s+)?$/gi,
regUndefined = /^(\s+)?(undefined|null)(\s+)?$/gi,
regNaN = /^(\s)?nan(\s)?$/gi;
function conversion(str) {
let r1 = regComma,
r2 = regNumber,
r3 = regBoolean,
r4 = regUndefined,
r5 = regNaN;
if (r2.test(str)) {return parseInt(str);}
if (r3.test(str)) {return /t/i.test(str)?true:false;}
if (r4.test(str)) {return /d/i.test(str)?undefined:null;}
if (r5.test(str)) {return NaN;}
return str;
}
for(var i = 0; i < MDA.length; i++) {
let cube = MDA[i];
for(var j = 0; j < cube.length; j++) {
let cell = cube[j],
convert = conversion(cell);
MDA[i][j] = convert;
}
}
console.log(MDA)