程序员开发实例大全宝库

网站首页 > 编程文章 正文

Javascript 学习笔记 Map 和 Array 转换

zazugpt 2024-08-30 04:44:20 编程文章 17 ℃ 0 评论



对象 2数组

取 key 数组

Object.keys(obj);

取 value 数组

Object.values(obj);

格式化后输出

对象:{"a":1,"b":2,"c":3}
数组:
[{"name":"a","value":1}, {"name":"b","value":2}, {"name":"c","value":3}]

var obj = {"a":1, "b":2,"c":3}
var arr = Object.keys(obj).map((k) => ({'name': k, 'value': obj[k]}) );
console.info(arr);

输出

[
    { "name": "a", "value": 1 },
    { "name": "b", "value": 2 },
    { "name": "c", "value": 3 }
]

数组 2 对象

数组:[{"name":"a","value":1}, {"name":"b","value":2}, {"name":"c","value":3}]
对象:
{"a":1,"b":2,"c":3}

var arr = [{"name":"a","value":1}, {"name":"b","value":2}, {"name":"c","value":3}];
var obj = {};
arr.forEach(v => obj[v.name] = v.value);
console.info(obj);
var arr = [{"name":"a","value":1}, {"name":"b","value":2}, {"name":"c","value":3}];
var obj = arr.reduce((acc, cur) => {acc[cur.name] = cur.value; return acc;}, {});
console.info(obj);

如果对象内每个元素都是数组

var obj = arr.reduce((acc, cur) => {
	// 格式化单条数据
 	var temp = {
		title: cur.title,
		url: cur.url
	};
	// 压进数组
	acc[cur.key] = acc[cur.key] || [];
	acc[cur.key].push(temp);
	// 返回累计器
	return acc;
}, {});

Array 2 Tree

function array2tree(arr, id, pid) {
	var id = id || "id"; // id默认叫 id
	var pid = pid || "pid"; // 父id默认叫 pid
    var rootId = rootId || 0; // 根id默认为 0
	var map = {};
	var root = [];
	var i, len;

	// 初始化
	len = arr.length;
	for (i = 0; i < len; i += 1) {
		map[arr[i][id]] = i; 
		arr[i].children = [];
	}
	
	for (i = 0; i < len; i += 1) {
		var item = arr[i];
		if (item[pid] === rootId) {  
			root.push(item);    
		} else {
			arr[map[item[pid]]].children.push(item);
		}
	}
	
	return root;
}

使用示例:

async function getTree(id){
    var data = await fetch("https://law.jerry.com/system/channel/treeData")
    .then(resp=>resp.json()).then(arr => array2tree(arr));
    return id ? data[id] : data;
}
(function test(){
    getTree().then(data => console.log(data));
})();

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表