我的应用程序在Typescript中读取多个Json文件填充选择框,但我想避免湿的(把所有东西都写两次)代码,并保持干的东西(不要重复自己)。我原本为每个json文件都准备了独特的函数,因为它们每个都有不同的值,需要以不同的方式进行解析,但我反而要做一个可以从我的主类中调用的函数,将读取和解析成一个数组并返回。
例如,我的 Countries Json 是这样的。
{
"Countries": {
"country": [
{
"_CountrySEQ": "0",
"_CountryCodeDesc": "UNITED STATES",
"_CountryCode": "USA"
},
{
"_CountrySEQ": "1",
"_CountryCodeDesc": "CANADA",
"_CountryCode": "CAN"
},
, , ,
}
}
我需要把它解析成一个key -value数组,看起来像这样。
[
{
key:'USA',
value:'UNITED STATES'
},
{
key:'CAN',
value:'CANADA'
}
. . .
]
但我有一个statesjson看起来是这样的:
{
"States": {
"state": [
{
"_State": "(cantons) Aargau",
"_CountryCode": "CHE"
},
{
"_State": "Abruzzi",
"_CountryCode": "ITA"
}
. . .
]
}
}
需要解析成这个样子
[
{
key:'CHE',
value:'(cantons) Aargau'
},
{
key:'ITA',
value:'Abruzzi'
}
. . .
]
有没有一种方法可以尽可能的模块化?比如用一个函数来处理?类的数组或接口是最好的解决方案吗?如果是,我如何正确实现它们?
这个函数可以处理两个数据集。
const parser = (dataset) => {
const [first, second, index1, index2] =
dataset.Countries ?
["Countries", "country", 2, 1] : ["States", "state", 0, 1];
return dataset[first][second].map(item => {
return {
key1: Object.values(item)[index1],
key2: Object.values(item)[index2],
}
});
};
parser(Countries);
parser(States);
在你的情况下,有两个函数根本不是dry。保持简单,如果你还有2个json,就开始想另一个解决方案。例如
function parseJson1(json) {
return json.Countries.country.map(v => ({key: v._CountryCode, value: v._CountryCodeDesc}));
}
function parseJson2(json) {
return json.States.state.map(v => ({key: v._CountryCode, value: v._State}));
}
每个json一个函数,每个函数只有1行。你为什么要把它弄得更复杂呢?