对不起这个初学者问题:
我将此作为回复:
{id: "bitcoin", name: "Bitcoin", symbol: "BTC", rank: "1", price_usd: "15487.0"}
现在我想将rank: "1", price_usd: "15487.0"
转换为rank: 1, price_usd: 15487.0
我需要这个的原因我因为我的表将字母数字排序而不是数字。
我该怎么做?
答案 0 :(得分:4)
你可以用,
var obj = {id: "bitcoin", name: "Bitcoin", symbol: "BTC", rank: "1", price_usd: "15487.0"};
Object.keys(obj).forEach((itm) => {
if(!Number.isNaN(+obj[itm])) obj[itm] = +obj[itm];
});
console.log(obj);
简单的数字转换正在这里发挥作用。如果使用+
运算符将非数字字符串转换为数字,则会返回NaN
。通过使用它,我们可以实现你想要的。
如果您想使用可靠的方式检查NaN
,请使用以下方法,
var obj = {id: "bitcoin", name: "Bitcoin", symbol: "BTC", rank: "1", price_usd: "15487.0"};
Object.keys(obj).forEach((itm) => {
let conv = +obj[itm];
if(conv == conv) obj[itm] = +obj[itm];
});
console.log(obj);
这是一种可靠的方法。因为根据ECMA脚本,检查数字是否为NaN
的可靠方法是检查数字是否等于自身。如果它不相等,则该数字为NaN
。
答案 1 :(得分:1)
JSON.parse
reviver可用于转换或过滤值:
j = '{"id":"bitcoin","name":"Bitcoin","symbol":"BTC","rank":"1","price_usd":"15487.0"}'
o = JSON.parse(j, (k, v) => isNaN(+v) ? v : +v)
console.log(o)

答案 2 :(得分:0)
如果您使用mysql作为数据库,则可以将表rank
中的列设置为int,将price_usd设置为decimal
,然后排序将正常工作。
如果您想转换数据客户端。那么你可以这样做
for(var k in data) {
if(k == 'price_usd') {
data[k] = parseFloat(data[k]);
}
// for rank also
}