js对json对象的遍历和其他方法处理

json的理解概要

字符串转成对象,对象转成字符串:

JSON.parse( json) <===> JSON.stringify( json )
jQuery.parseJSON(json) (这个是jquery中的方法)

根据key获取value两种方式

var value1 = eval("jsonObj." + "家电"); // value1 = 40
var value2 = jsonObj["家电"];  // value2 = 40 

设置key的属性的值
jsonObj["西门子"] = 100;

删除key和值
deledte jsonObj["海尔"];

遍历json对象(for …in 与 for … of)

区别:for…in 遍历对象的时候是遍历属性key.,遍历数组对象的时候是遍历下标index。

for …of 遍历数组的时候实际上遍历的是元素value,适合用这个。要遍历json对象的话最好转成数组之后再用for …of

let iterable = [3, 5, 7];
for (let i in iterable) {
   console.log(i);  //  0, 1, 2
}

for (let i of iterable) {
  console.log(i); // 3, 5, 7
}

//第一种:for ...in
var packJson = {"name":"Liza", "password":"123"} ;
for(var k in packJson ){
     //遍历packJson 对象的每个key/value对,k为key
      alert(k + " " + packJson[k]);
}

//第二种: for...of
var  obj = {a:1, b:2, c:3};
for (let key of Object.keys(obj)) {  // Object.keys(),把json对象的key转成了数组。
   console.log(key+":"+ obj[key]  );
}
//打印: a :1    b :2    c: 3

合并多个json对象:Object.assign

函数定义:target 目标对象,sources 源对象 (可以有多个)。
可以合并多个对象到一个对象中, 返回target。此方法会同时修改target对象

特点

覆盖:如果目标对象中的属性具有相同的键,则属性将被源对象中的属性覆盖。后面的源对象的属性将类似地覆盖前面的源对象的属性。对前面的例子做修改如下:

Object.assign(target: object, ...sources: any[]): any;

//合并多个json对象
const o1 = { a: 1 };
const o2 = { b: 2 };
const o3 = { c: 3 };
const obj = Object.assign(o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
console.log(o1);  // { a: 1, b: 2, c: 3 }, 注意目标对象o1自身也会改变。

//合并具有相同属性的对象:属性被后续参数中具有相同属性的其他对象覆盖。
const o1 = { a: 1, b: 1, c: 1 };
const o2 = { b: 2, c: 2 };
const o3 = { c: 3 };
const obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }

Object.keys

const keys= Object.keys(options); //只获取json对象的属性key,返回一个存所有key的数组。

var obj1 = {name: "Tom", age: 23};
let keys=Object.keys(obj1); // ["name","age"]

展开语法合并多个json对象

var obj1 = {name: "Tom", age: 23};
var obj2 = {name: "Tom", age: 24};

var obj = {sex: "Man", ...obj1, ...obj2}
console.log(obj); // { sex: 'Man', name: 'Tom', age: 24 }

对json形式数据的数组去重

let list = [{   id: "1", content: "A" },
        {  id: "2",  content: "B" },
        { id: "2",  content: "C" },
        { id: "4",  content: "D" }
 ];
 function Unique(arr){
    let  result = [];
    for (let i = 0; i < arr.length; i++) {
       let flag = true;
       let temp = arr[i];
       for (let j = 0; j < result.length; j++) {
            if (temp.id === result[j].id) {
              flag = false;
              break;
            }
       }
       if(flag){
         result.push(temp);
       }
    }
     return result;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值