我试图为一个游戏(维多利亚II)制作一个工具,保存游戏(整个保存游戏没有这种格式,只有我打算使用的部分,剩下的保存游戏现在没有任何重要性)维多利亚II有这样的格式:
AAA = {
B = {
random_text = 1000.00
another_one = 400.00
}
C= {
no_importance = 222
}
D = {
random_text = 5.00
another_one = 10.00
}
}工具将如何工作?这个工具将计算AAA国家的GDP (有100个国家,首先我想计算AAA的GDP,但我要计算每一个国家的GDP)。每个国家的代码都是大写的三个字母),B参数是一些商品的国内生产(random_text和another_one),C参数不重要,所以工具会忽略它。D参数是一些商品的价格(在这种情况下,random_text和another_one,如果没有弄错,就有20种商品)。因此,工具(在JavaScript中)必须用每一种商品的价格乘以该国的商品生产,然后用每个国家的国内生产总值来编制一个表格。问题是:我如何才能用JavaScript做到这一点?我试图使用regexp,但我总是失败,代码捕获参数C并使工具失败。对于每一个国家,我想在表格中加上它的名字和它各自的国内生产总值。
注意:在上面的链接中,有更多关于工具工作的评论。
发布于 2016-09-14 03:58:09
假设上面显示的格式是可靠的,您可以通过几次对.replace()的调用完成对JSON的快速和脏的转换,然后解析该JSON并根据需要处理结果对象。
我不知道你在说什么,但我想你的意思是,AAA的国内生产总值是每个B值乘以相应的D值的总和,即1000.00 * 5.00 + 400.00 * 10.00 = 9000。
var input = ' /* your input here */ ';
var json = '{'
+ input.replace(/([^\s]+)\s*=/g,'"$1":')
.replace(/([^{\s])\n(\s*[^{}])/g,'$1,\n$2')
.replace(/,(\s*})/g,'$1')
+ '}';
var obj = JSON.parse(json);
var output = Object.keys(obj).map(function(v) {
return {
country: v,
gdp: Object.keys(obj[v].B).reduce(function(p, c) {
return p + obj[v].B[c] * obj[v].D[c];
}, 0)
};
});在运行上述操作之后,output变量将是一个具有这种格式的详细信息的对象数组:
[ { "country": "AAA", "gdp": 9000 }, //etc. ]扩展以下内容并运行它,使其与三个国家一起工作:
var input = `AAA = {
B = {
random_text = 1000.00
another_one = 400.00
}
C= {
no_importance = 222
}
D = {
random_text = 5.00
another_one = 10.00
}
}
BBB = {
B = {
random_text = 111.00
another_one = 222.00
}
C= {
no_importance = 222
}
D = {
random_text = 3.00
another_one = 4.00
}
}
CCC = {
B = {
x = 10.0
y = 20.0
z = 30.0
}
C= {
no_importance = 222
}
D = {
x = 1.00
y = 2.00
z = 3.00
}
}`;
var json = '{'
+ input.replace(/([^\s]+)\s*=/g,'"$1":')
.replace(/([^{\s])\n(\s*[^{}])/g,'$1,\n$2')
.replace(/,(\s*})/g,'$1')
+ '}';
var obj = JSON.parse(json);
var output = Object.keys(obj).map(function(v) {
return {
country: v,
gdp: Object.keys(obj[v].B).reduce(function(p, c) {
return p + obj[v].B[c] * obj[v].D[c];
}, 0)
};
});
console.log(output);
https://stackoverflow.com/questions/39481917
复制相似问题