在对象上迭代.解构其键和属性并添加新的键和属性
Iterate over object. Deconstruct its keys and properties and add new ones
我当前的JSON结构如下。
[ {A: 84 , B: 17 , C: 11 } ]
我需要建造一个看起来像这样的东西。
[ { name : "A" , value : 84 , color : "black" },
{ name : "B" , value: 17 , color: "blue" } ,
{ name : "C", value: 11 , color: "amber" } ]
因此,我需要一个添加了属性(本例为颜色)的新结构,这些属性将取决于初始键值。"A"、"B"或"C"。
我不要求一个完整的答案(如果你不想让一个人随意做),我只想知道这种操作需要哪个功能。
使用Object.keys
、Array.map
函数和辅助"颜色映射"对象的解决方案:
var arr = [ {A: 84 , B: 17 , C: 11 }],
colorMap = {A:"black", B:"blue", C:"amber"}, // can be extended with any other relations
current = arr[0];
var result = Object.keys(current).map(function(k) {
return {'name': k, 'value': current[k], 'color': colorMap[k]};
});
console.log(JSON.stringify(result, 0, 4));
console.log
输出:
[
{
"name": "A",
"value": 84,
"color": "black"
},
{
"name": "B",
"value": 17,
"color": "blue"
},
{
"name": "C",
"value": 11,
"color": "amber"
}
]
您可以将用于。。在中循环键,然后映射一个新对象:
var current = [ {A: 84 , B: 17 , C: 11 } ];
var result = [];
for(var key in current[0]){
var name = key;
var value = current[0][key];
var color = "";
switch(key){
case "A":
color = "black";
break;
case "B":
color = "blue";
break;
case "C":
color = "amber";
break;
};
result.push({name : name, value : value, color: color});
}
您不需要破坏任何东西,一个简单的循环就足以创建新的结构:
var result = [];
for (var prop in input[0])
result.push({
name: prop,
value: input[0][prop],
color: colorForName(prop)
});
相关文章:
- 选中单选框时将属性添加到输入字段
- 将css属性添加到对象的集合中
- 用javascript向数组(?)中的特定属性添加值
- AngularJs,在没有隔离的情况下将指令属性添加到作用域
- 如何将enctype属性添加到FormData()对象中
- 如何将属性添加到自定义角度指令
- 如何将额外的属性添加到bootstrapTable中
- 在 Javascript 生成的列表中,如何将自定义属性添加到 标记
- 将动态属性添加到对象末尾
- 向 JSON 对象属性添加引号
- 将地理 JSON 要素属性添加到地图框弹出窗口
- 是否有脚本/代码可以一次将链接属性添加到多个链接
- 将自定义属性添加到 vuejs 组件
- 将属性添加到带有href链接但没有#的元素
- 将属性添加到数组中的所有对象
- Jquery将data-rel属性添加到所有输入字段,并移除name属性
- 将属性添加到窗元素时是否引发事件
- 将onsubmit属性添加到表单并提交
- 将属性添加到数组中的每个对象
- 如何使用jQuery向属性添加值