在前端复杂数据处理场景中,JSON 数组的深度赋值和JSON 对象转 JSON 数组是高频需求,前者需解决嵌套对象的层级拷贝问题,后者需实现数据格式的灵活转换。
对于包含多层嵌套对象的 JSON 数据,浅拷贝仅能复制顶层属性,嵌套对象仍会存在引用关联。而通过递归函数可实现深度赋值,逐层遍历并拷贝所有层级的属性,生成与原数据完全独立的新对象。
<!DOCTYPE HTML>
<html>
<head>
<title>test1</title>
</head>
<body>
<script>
var arr={
"name":"zhansan",
"age":23,
"address":{
"city":"beijing",
"gas":{
"gasSheet":"气态流出物月报",
"H_adjust":1
},
"time":{
"duration":31
}
},
"units":{"title":"function"}
}
function show(obj){
var tmp={};
for(var i in obj){
if(obj[i]=="object"){
<span style="color:#ff0000;">tmp[i]=show(obj[i]);</span>
}
else{
<span style="color:#ff0000;">tmp[i]=obj[i]</span>
}
}
return tmp;
}
var result=show(arr);
console.log(result);
</script>
</body>
</html>
在可视化图表(如 ECharts)、列表渲染等场景中,常需将{key:value}结构的 JSON 对象,转换为[{name:key,data:value}]格式的 JSON 数组。以下两种实现方案各有优劣,可根据业务需求选择。
适用于 JSON 对象键值对数量固定且已知的场景,直接通过索引为数组元素赋值。
核心代码:
var kpis = {"A": [1,2,3,4,5],"B": [ 2,3,4,5,6]};
var series = [{name:null,data:null}, {name:null,data:null}];
var index=0;
for( var tests in kpis){
series[index].name=tests;
series[index].data=kpis[tests];
index++;
}
方案点评:
通过动态创建 JSON 对象并push到空数组,适配任意数量的键值对,是更通用的实现方案。
核心代码:
var kpis = {"A": [1,2,3,4,5],"B": [ 2,3,4,5,6]};
var series=[];
for(var tests in kpis){
var json = {name:tests, data:kpis[tests]};
series.push(json);
}
方案点评:
正在加载... ...