最近在做项目,同事问我了一个问题,拿到一个对象里面的值,如下
var obj = {
化学考试: {
测试1: [
{id: 43, listId: 75, orderNum: 3, item: "1", type: 1, createTime: "2020-04-22 15:53:57",}
],
测试2: [
{id: 43, listId: 75, orderNum: 3, item: "1", type: 1, createTime: "2020-04-22 15:53:57",}
]
}
};
需求:
1.单提出来‘化学考试’四个字
2.单提出来‘测试1’,‘测试2’这个字
3.再提出来里面得数据
刚看到时候有点懵,不知道如何下手,在网上查阅了点资料,说是用for of 遍历出来,于是抱着试试的态度写了下来,首先这是一个对象,我们怎么把这个对象变成数组呢?
他不是一个不是类数组对象,添加一个[Symbol.iterator]属性,并指向一个迭代器即可
obj[Symbol.iterator] = function*(){
var keys = Object.keys(obj);
for(var k of keys){
yield [k,obj[k]]
}
};
for(var [k,v] of obj){
console.log(k);
console.log(v)
}
让我们看一下打印出来的值,k就是化学考试,v就是里面的对象
接下来就是拿v里面的测试1,测试2了,于是用了同样的方法转换为对象
v[Symbol.iterator] = function*(){
var key = Object.keys(v);
for(var k of key){
yield [k,v[k]]
}
};
for(var [item,i] of v){
console.log(item)
console.log(v[item])
v[item].map(res=>{
console.log(res.id)
})
}
这样item打印出来就是测试1,测试2,v[item]就是里面的数组,于是对数组遍历就拿到了数组里面的值。
完整代码如下:
var obj = {
化学考试: {
测试1: [
{id: 43, listId: 75, orderNum: 3, item: "1", type: 1, createTime: "2020-04-22 15:53:57",}
],
测试2: [
{id: 43, listId: 75, orderNum: 3, item: "1", type: 1, createTime: "2020-04-22 15:53:57",}
]
}
};
obj[Symbol.iterator] = function*(){
var keys = Object.keys(obj);
for(var k of keys){
yield [k,obj[k]]
}
};
for(var [k,v] of obj){
console.log(k);
console.log(v)
v[Symbol.iterator] = function*(){
var key = Object.keys(v);
for(var k of key){
yield [k,v[k]]
}
};
for(var [item,i] of v){
console.log(item)
console.log(v[item])
v[item].map(res=>{
console.log(res.id)
})
}
}