需求 有一组全国各省份的数据如下,现在需要把下面数据按照国标排序,并且name要使用简称(比如:上海市就是上海)
{name: '上海市', value: 70, },
{name: '甘肃省', value: 51, },
......
{name: '山东省', value: 81, },
思路
1,先按照国标排序整理出模板如下
var finalArea = [
'北京',
'天津',
'河北',
'山西',
'内蒙古',
'辽宁',
'吉林',
'黑龙江',
'上海',
'江苏',
'浙江',
'安徽',
'福建',
'江西',
'山东',
'河南',
'湖北',
'湖南',
'广东',
'重庆',
'四川',
'贵州',
'云南',
'西藏',
'陕西',
'甘肃',
'青海',
'宁夏',
'新疆',
'广西',
'海南',
]
2,遍历模板的每一项去和数据比对,如果模板中的某一项能在数据中查找到(这里在比对时要使用模糊查询)就取出这一项并重新赋值新对象并push到新数组里。
代码(这里拆成了两部分):
function getNameValueArr(data) {
var arr = [];
// 遍历模板,按照模板顺序依次进行查询
finalArea.forEach((item, index) => {
fuzzyQuery(data, item, arr)
});
return arr
}
// 模糊查询重组数据
function fuzzyQuery(data, keyWord, arr) {
var o = {};
for (var i = 0; i < data.length; i++) {
if (data[i].name.indexOf(keyWord) >= 0) {
o.name = keyWord;
o.value = data[i].value;
arr.push(o);
}
}
}
如果需要做成echarts柱状图则再加一个方法
// echarts data转换
function getChartsArr(data) {
// 这里是把x,y轴data放在一个数组里面,也可以放对象里面
var echartsArr = [];
var arrX = [];
var arrY = [];
data.forEach((item, index) => {
arrX.push(item.name);
arrY.push(item.value)
})
echartsArr.push(arrX);
echartsArr.push(arrY);
return echartsArr
}
最终代码
function getNameValueArr(data) {
var arr = [];
// 遍历模板,按照模板顺序依次进行查询
finalArea.forEach((item, index) => {
fuzzyQuery(data, item, arr)
});
return getChartsArr(arr)
}
// 模糊查询重组数据
function fuzzyQuery(data, keyWord, arr) {
var o = {};
for (var i = 0; i < data.length; i++) {
if (data[i].name.indexOf(keyWord) >= 0) {
o.name = keyWord;
o.value = data[i].value;
arr.push(o);
}
}
}
// echarts data转换
function getChartsArr(data) {
// 这里是把x,y轴data放在一个数组里面,也可以放对象里面
var echartsArr = [];
var arrX = [];
var arrY = [];
data.forEach((item, index) => {
arrX.push(item.name);
arrY.push(item.value)
})
echartsArr.push(arrX);
echartsArr.push(arrY);
return echartsArr
}
使用
xAxis: [
{
type: 'category',
data: getNameValueArr(data)[0],
axisTick: {
alignWithLabel: true
},
}
],
series: [
{
name: 'youname',
type: 'bar',
barWidth: '30%',
data: getNameValueArr(data)[1],
},
]