js调用Android方法获取json,js-json、数组相关操作

一、json与字符串相互转换

字符串对象:(注意key值不加引号)

var jsonString = {

key1 : 'value1',

key2 : 'value2'

} ;

JSON.stringify(jsonObj);//json转字符串

JSON.parse(jsonString);//字符串转JSON

二、json与数组组合数据

var arr1 = []; //定义一个数组对象

arr1.push({ index: 1, value: '111' });

arr1.push({ index: 2, value: '222' });

var arr2 = [];

arr2.push({ index: 1, value: '1111' });

arr2.push({ index: 2, value: '2222' });

console.log("test arr1[0]相关数据 index=" + arr1[0].index);

console.log("test arr1[0]相关数据 value=" + arr1[0].value);

var jsonobj = {}; //定义一个json对象

jsonobj.res = false;

jsonobj.arr1 = arr1;

jsonobj.arr2 = arr2;

console.log("json转字符串=" + JSON.stringify(jsonobj));

/*console.log("字符串转JSON=" + JSON.parse(jsonString));*/

打印:

login.html:269 test arr1[0]相关数据 value=111

login.html:275 json转字符串={"res":false,"arr1":[{"index":1,"value":"111"},{"index":2,"value":"222"}],"arr2":[{"index":1,"value":"1111"},{"index":2,"value":"2222"}]}

三、数组push添加元素:

var arrayObj = [ ];//定义数组

arrayObj.push({ name: "key" + index, path: "value" });//键值对方式

arrayObj.push(‘value1’,‘value2’);//都是值

四、数组删除元素:

var textArr = ['a','b','c','d'];

这时我想删除这个数组中的b元素:

方法一:delete 删除数组

delete textArr[1] 结果为: ["a",undefined,"c","d"]

只是被删除的元素变成了 undefined 其他的元素的键值还是不变。

方法二:aplice 删除数组

splice(index,len,[item]) 注释:该方法会改变原始数组。

index:数组开始下标 len: 替换/删除的长度 item:替换的值,删除操作的话 item为空

textArr.splice(1,1); 结果为:["a","c","d"] 直接删除了数组 改变了数组的值。

五、清空数组

arrayObj.splice(0, arrayObj.length);

六、使用jQuery取data值并排序

//数组遍历及排序

var arr = [];

$(".ping").each(function(){

arr.push($(this).attr("data_order"));

});

arr.sort();

//根据业务需求自定义排序规则

function sortNumber(a,b){

return a - b

}

arr.sort(sortNumber);

七、数组中去除重复数据(过滤)

/**

* 去除重复数组

*/

function filterRepeat(filesArr) {

for(var i = 0; i < filesArr.length - 1; i++) {

for(var j = i + 1; j < filesArr.length; j++) {

if(filesArr[i].path == filesArr[j].path) { !!!path换成要需要判断的key

filesArr.splice(j, 1);

filterRepeat(filesArr);//递归调用

}

}

}

return filesArr;

}

八、第二个数组中去除第一个数组中已存在的数据(如果是json数组,注意加上json key,暂不适合做公共方法)

var arr = [22,33];

var arrDest = [11, 22, 33];

function filterArrayExceptFirst(arr, arrDest) {

for(var i = 0, leni = arr.length; i < leni; i++) {

splicedata(arr[i], arrDest);//arr[i] 根据需要需求加 json key

}

return arrDest;

}

function splicedata(arrdata, arrDest) {

if(!arrDest) {

return;

}

for(var j = 0, lenj = arrDest.length; j < lenj; j++) {

if(!arrDest || !arrDest[j]) {

return;

}

console.log("-----" + JSON.stringify(arrDest[j]));

if(arrdata == arrDest[j]) {//arrDest[j] 根据需要需求加 json key

arrDest = arrDest.splice(j, 1);

console.log("-----" + j);

splicedata(arrDest);

}

}

}

console.log("-----" + filterArrayExceptFirst(arr, arrDest));

九、关于json中动态设置key值的说明(相当于把{}转成数组了?)

key值动态设置用[ ],取值也用[ ]

var jsonobj = {};

var keyobj="thisiskey";

jsonobj[keyobj] ="this is value";

console.log('test:' + jsonobj.thisiskey);

var keynew = getKey(keyobj);

console.log('test:' + jsonobj[keynew]);

function getKey(p) {

if(p.indexOf('"') == 0) {

return p.substring(0, p.length);

} else {

return p;

}

}

补充:在js操作style时, xxxObj.style.width="20"+px;

也可以使用 xxxObj.style["width"] ="20" +px;

html中的DOM对象实质就是json对象

遍历json使用 for-in,(扩展:php中使用for-as)

var json = {a:12,b:34};

for(var index in json ){

console.log("the key:"+index+",the value:"+json[index ]);

}

十、数组合并相关

1、concat

js的Array对象提供了一个叫concat()方法,连接两个或更多的数组,并返回结果。

var c = a.concat(b);

2、for循环

大概的思路是:遍历其中一个数组,把该数组中的所有元素依次添加到另外一个数组中。直接上代码:

for(var i in b){

a.push(b[i]);

}

这样的写法可以解决第一种方案中对内存的浪费,但是会有另一个问题:丑!这么说不是没有道理,如果能只用一行代码就搞定,岂不快哉~

3、apply

函数的apply方法有一个特性,那就是func.apply(obj,argv),argv是一个数组。所以我们可以利用这点,直接上代码:

a.push.apply(a,b);

调用a.push这个函数实例的apply方法,同时把,b当作参数传入,这样a.push这个方法就会遍历b数组的所有元素,达到合并的效果。

这里可能有点绕,我们可以把b看成[4,5,6],变成这样:

a.push.apply(a,[4,5,6]);

然后上面的操作就等同于:

a.push(4,5,6);

这样就很清楚了!

另外,还要注意两个小问题:

1)以上3种合并方法并没有考虑过a、b两个数组谁的长度更小。

所以好的做法是预先判断a、b两个数组哪个更大,然后使用大数组合并小数组,这样就减少了数组元素操作的次数!

2)有时候我们不希望原数组(a、b)改变,这时就只能使用concat了。

十一、json数组排序(苹果环境下 sort方法无效,需要重写)

var data = [ {"key":"a"}, {"key":"b"}, {"key":"c"}]

data.sort( function(a,b){//data此时已经是排序后的对象

return a.key-b.key;//字符号好像不需要强制转成int,结果: -1 0 1(要通过计算返回取到 -1 0 1)

});

示例:

function _sortData(data) {

if(!data) {

return data;

}

//按照时间和_stateflag值都降序排列,最终只要一个return

data.sort(function(a, b) { //data此时已经是排序后的对象

var _stateflag = _getstateflag(b.ManTaskState, a.TaskState);

if(checkDateValid(b.TaskDealDatetime, a.TaskDealDatetime) && _stateflag == 0) {

return -1;

} else if(checkDateValid(b.TaskDealDatetime, a.TaskDealDatetime) == false && _stateflag == 2) {

return 1;

} else {//加上&&条件,让整体判断有机会往下走

if(_stateflag == 0) {

return -1;

} else if(_stateflag == 1) {

return 0;

} else { //2

return 1;

}

}

});

}

更多访问 http://blog.csdn.net/salonzhou/article/details/50801745

重写sort方法:

;(function(w) {

var _sort = Array.prototype.sort;

Array.prototype.sort = function(fn) {

if(!!fn && typeof fn === 'function') {

if(this.length < 2) return this;

var i = 0,

j = i + 1,

l = this.length,

tmp, r = false,

t = 0;

for(; i < l; i++) {

for(j = i + 1; j < l; j++) {

t = fn.call(this, this[i], this[j]);

r = (typeof t === 'number' ? t : !!t ? 1 : 0) > 0 ? true : false;

if(r) {

tmp = this[i];

this[i] = this[j];

this[j] = tmp;

}

}

}

return this;

} else {

return _sort.call(this);

}

};

})(window);

十二、把一个数组赋值另一个数组

arr1 = arr2;//某些情况会出错

优化:

arr1= arr2.slice(); //使用前不要对arr1 splice清空数组

//注意arr2是数据源,不要写成arr1= arr1.slice(arr2)!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值