Как присвоить новое value для ключа обьекта js
Нужно получать обьект с файла JSON.В этом обьекте есть ключи значения которых функция.Когда я импортирую JSON в JS значения этих ключей определяются как строки(как я понял это нормально). Подскажите пожалуйста, как эти значения присвоить тем же ключам , только с типом функция.
let map = {
"mToSm": function (a) { return a * 100 },
"smToM": function (a) { return a / 100 },
"mToIn": function (a) { return a * 39.37008 },
"inToM": function (a) { return a / 39.37008 },
"mToFt": function (a) { return a * 3.2808 },
"ftToM": function (a) { return a / 3.2808 },
"smToIn": function (a) { return a * 0.3937 },
"inToSm": function (a) { return a / 0.3937 },
"smToFt": function (a) { return a * 0.0328 },
"ftToSm": function (a) { return a / 0.0328 },
"inToFt": function (a) { return a * 0.0833 },
"ftToIn": function (a) { return a / 0.0833 },
}
import data from '../data.json' assert {type: "json"};
let values = Object.values(data)
for (let i = 0; i < values.length; i++) {
values[i] = new Function('return ' + values[i])
for (let keys in data) {
keys = values[i]
}
}
let finalMap = {
...map,
...data,
};
JSON
{
"mmToSm": "function (a) { return a / 10 }",
"smToMm": "function (a) { return a * 10 }"
}
Вот что выдает мне консоль
Ответы (1 шт):
Автор решения: Rudi
→ Ссылка
Можно сделать так..
let map = {
"mToSm": function (a) { return a * 100 },
"smToM": function (a) { return a / 100 },
"mToIn": function (a) { return a * 39.37008 },
"inToM": function (a) { return a / 39.37008 },
"mToFt": function (a) { return a * 3.2808 },
"ftToM": function (a) { return a / 3.2808 },
"smToIn": function (a) { return a * 0.3937 },
"inToSm": function (a) { return a / 0.3937 },
"smToFt": function (a) { return a * 0.0328 },
"ftToSm": function (a) { return a / 0.0328 },
"inToFt": function (a) { return a * 0.0833 },
"ftToIn": function (a) { return a / 0.0833 },
}
String.prototype.parseFunction = function () {
var funcReg = /function *\(([^()]*)\)[ \n\t]*{(.*)}/gmi;
var match = funcReg.exec(this.replace(/\n/g, ' '));
if(match) {
return new Function(match[1].split(','), match[2]);
}
return null;
};
//import data from '../data.json' assert {type: "json"};
let data = {
"a": "function (a) { return a / 10 }",
"b": "function (a) { return a * 10 }"
}
for (let keys in data) {
data[keys] = data[keys].parseFunction()
}
let finalMap = {
...map,
...data,
};
console.log(finalMap.a(5),finalMap.b(5))
