json 数组 字符串转换 关联数组使用 清空数组
字符串转对象(strJSON代表json字符串)
var obj = eval(strJSON);
var obj = strJSON.parseJSON();
var obj = JSON.parse(strJSON);
json对象转字符串(obj代表json对象)
var str = obj.toJSONString();
var str = JSON.stringify(obj)
运用时候需要除了eval()以外需要json.js包(切记哦)
测试一个关联数组,添加数据,删除数据
html代码
<span class="btn add">添加数组</span> <span class="btn delete">删除数组</span>
js代码
/*从数组中根据元素删除指定的项*/
Array.prototype.indexOf = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) return i;
}
return -1;
};
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
};
$(".add").click(function(){ var arr = []; var aa=["id1","id2","id3"]; var c2={ "id1":["a","1","2111"], "id2":["a2","12","21112"], "id3":["a3","12","21112"] }; console.log(c2.id2); for(var i=0; i<aa.length; i++){ console.log(c2[aa[i]]); arr.push(c2[aa[i]]); console.log("arr:"+arr); } $(".del").click(function(){ arr.remove(c2.id2); console.log("arr删除后:"+arr); }) })
关联数组的创建与用splice删除数组
删除数组的js
//移除元素 var attrIndexOf = function (target, list, attr) { var i = 0, l = list.length; for (i = 0; i < l; i += 1) { if (list[i][attr] == target) { return i; } }; return -1; }; var removeItem = function (id) { var pos = attrIndexOf(id, newArray, 'dataid'); if (pos !== -1) { newArray.splice(pos, 1); }; };
attrIndexOf方法确定当前要移除的数组的位置
removeItem 方法移除数组元素
去重添加数组元素
if(jQuery.inArray(ObjData, ObjArr)==-1){//如果-1 在选中时push添加 ObjArr.push(ObjData); }
ObjArr是数组,
ObjData是要插入数组的元素
inArray方法为-1的时候代表ObjArr数组中还没有ObjData元素,就可以push到数组
创建二维数组
var newArray = []; var prdArray = []; $("#prdlist").delegate("li","click",function(){ var _t=$(this); var dataid=_t.data("id");//或许选中的商品id var id = "a"+dataid; var pic = _t.find(".pic img").attr("src"); var title = _t.find(".title").html(); var price = _t.find(".price").html(); prdArray = {dataid:dataid,pic:pic,title:title,price:price}; checkedEle(_t,prdArray,newArray,0);//执行选择 console.log("%c newArray:"+newArray,"background:#c00;color:#fff"); console.log("%c "+newArray.length,"background:#c00;color:#fff"); /* 预览区域 */ var prehtml = ""; var aLen=newArray.length; if(aLen>0){ for(var i=0;i<aLen;i++) { var dataid = newArray[i]['dataid']; var pic = newArray[i]['pic']; var title = newArray[i]['title']; var price = newArray[i]['price']; prehtml += "<li data-id='"+dataid+"' id='p"+dataid+"'>" +"<a href='javascript:void(0);'>" +"<span class='move_area'><i class='layer_icon_move' title='点击我可以拖拽排序哦'></i></span>" +"<div class='prdinfo'>" +"<div class='pic'><img src='"+pic+"'></div>" +"<div class='prd-desc'>" +"<p class='title'>"+title+"</p>" +"<p class='price'>"+price+"</p></div>" +"</div>" +"<div class='cancleprd'>X</div>" +"</a></li>"; } } $("#previewprd ul").html(prehtml); });
以上代码,有很多个这样的元素,属性和值不同,点击某个元素,获得当前元素的一些属性值,将它放在一个一维数组prdArray 中,checkedEle是去重添加数组,将一维数组prdArray当成元素push给新数组newArray。
$("#previewprd ul")里面放由数组拆成的元素重新组合成的html,数组拆出值用for循环var dataid = newArray[i]['dataid']; 这里必须是单引号,双引号和无引号都不行。
清空数组方法
方式1,splice
var ary = [1,2,3,4]; ary.splice(0,ary.length); console.log(ary); // 输出 [],空数组,即被清空了
方式2,length赋值为0
这种方式很有意思,其它语言如Java,其数组的length是只读的,不能被赋值。如
int[] ary = {1,2,3,4}; ary.length = 0;
Java中会报错,编译通不过。而JS中则可以,且将数组清空了,
var ary = [1,2,3,4]; ary.length = 0; console.log(ary); // 输出 [],空数组,即被清空了
方式3,赋值为[]
var ary = [1,2,3,4]; ary = []; // 赋值为一个空数组以达到清空原数组
这里其实并不能说是严格意义的清空数组,只是将ary重新赋值为空数组,之前的数组如果没有引用在指向它将等待垃圾回收。