前言
今天做项目,遇到一个需求,在data:_data数据格式里,_data要求是一个json数组;简单的说,我希望_data的数据格式如下:
_data:[
{"name":"国1","icon":"circle"},
{"name":"国2","icon":"circle"},
{"name":"国3","icon":"circle"},
{"name":"国4","icon":"circle"}
]
而我现有的从后台返回的数据是:data=["国1","国2","国3","国4"],这里的data是字符串,不是数组;
解决方案
其实简单的看,就是字符串,数组,json三者之间的格式转换;其中涉及到相关的方法等;总的来说,从理论上来说是可以解决的;
//1.把字符串变成数组
data=JSON.parse(data);
//2.循环遍历,构建新的字符串数组
data=data.map(function(x,y,z){
return {
"name":x,
"icon":"circle
}
})
OK,问题解决…
虽然问题简单,但是中途遇到了各种奇葩事情,在此记录并做推论总结
问题记录
1.我们首先看后台返回的数据 data=[“国1”,“国2”,“国3”,“国4”];这里的data是字符串,我在强调一遍;
这里是我在浏览器中的输出结果,因为在浏览器中,是可以用颜色进行区分的,如果实在心理上不能接受,你可以认为data="[“国1”,“国2”,“国3”,“国4”]";但是由于规范问题以及日后的习惯养成,我建议以浏览器为准;
这个字符串是后台返给我的,但是我接下来,要用这组数组去后台查询新的结果;由于oracle数据库的限制,我们知道,数据库是不能识别双引号的,只能是单引号;
举例:select * from table t where t.name=‘老王’;这里的老王是必须用单引号引起来的
那么问题来了,如何转换呢?下面是我的解决办法:
后台查询需要的格式是:data= ‘国1’,‘国2’,‘国3’,‘国4’ ;
data.replace('[','').replace(']','').replace(/"/g,'\'');
推论总结
其实问题及需求是练手的最好过程,在此将数组的相关操作做简单记录
JavaScript数组常用api:
arr.join("*")---将arr数组的元素以*号串联成字符串,返回字符串类型
arr.push("jack")---向arr数组尾部添加jack元素,返回修改后的数组长度
arr.pop("jack")---移除数组尾部的元素jack,返回移除的元素jack
arr.shift("bob")---移除数组头部元素bob,返回移除的元素bob,如果数组为空,则返回undefined
arr.unshift("bob")---向数组头部添加元素bob,返回修改后的数组的长度
arr.sort()---排序数组,返回修改后的数组;由于这个是比较的字符串,有所弊端,网上自行搜索解决办法
arr.reverse()---反转数组,返回修改后的数组,原数组改变
arr.concat(1,2,3)---添加1,2,3到原数组中,返回修改后的数组,原数组不变
arr.slice(2,5)---切割数组,从下坐标2到下坐标5的元素组成新的数组,返回新的数组
splice()---这个就牛逼了,增删改查一套全
indexOf()和 lastIndexOf() (ES5新增)---查找元素,没有就返回-1,有就返回对应的下标
reduce()和 reduceRight() (ES5新增)---基本没什么屌用
--------------------------------------------------------------------------------------
arr.forEach() (ES5新增)---无返回值
arr.map() (ES5新增)---返回新数组
arr.filter() (ES5新增)---返回新数组
arr.every() (ES5新增)---返回boolean
arr.some() (ES5新增)---返回boolean