for...of..转换为key,value形式

本文介绍了如何将一个对象通过for...of遍历转换为key-value形式。在遇到需要从对象中获取值的问题时,作者利用对象的[Symbol.iterator]属性创建迭代器,从而将对象转换为数组,进一步获取并遍历内部的值。通过这种方法,成功地获取到对象内嵌套的数组中的所有值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做项目,同事问我了一个问题,拿到一个对象里面的值,如下

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)
		})
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值