Рассматривали ли вы использование встроенной функции JavaScript isFinite
?
var a = isFinite(123)
var b = isFinite(-1.23)
var c = isFinite(5-2)
var d = isFinite(0)
var e = isFinite(NaN)
var f = isFinite(Infinity)
console.log({a,b,c,d,e,f})
Поскольку я не знаю, какой тип ответа от вашей службы (числовое или строковое представление числа), я предоставлю 2 решения.
Для номера:
res.status(200).send(isFinite(response) ? response : "")
Для строкового решения вы предложили себе:
res.status(200).send(response.replace(/(Infinity|NaN)/g, ''))
Если вы сами не уверены в типе, вы можете упростить решение для обработки все они похожи на строки
res.status(200).send(response.toString().replace(/(Infinity|NaN)/g, ''))
Обычно JSON.stringify
заменяет значения NaN
и Infinity
нулями, поэтому я бы предложил написать собственную функцию заменителя, чтобы заменить их на пустые строки, как в примере ниже
const data = {a: Infinity, b: NaN, c: 1, d: "test"}
function replacer(key, val){
if (typeof val === "number" && !isFinite(val)) return ""
return val;
}
const stringified = JSON.stringify(data, replacer);
console.log(stringified)
Даже если они на самом деле являются строками типа "Infinity"
или "NaN"
, вы все равно можете использовать функцию заменителя для достижения аналогичных результатов
const data = {a: "Infinity", b: "NaN", c: 1, d: "test"}
function replacer(key, val){
if (val === "Infinity" || val === "NaN") return ""
return val;
}
const stringified = JSON.stringify(data, replacer);
console.log(stringified)