迭代对象。解构其键和属性并添加新的键

时间:2016-05-06 12:08:45

标签: javascript arrays javascript-objects

我目前的JSON结构如下所示。

kd> $$>a< getuname4proc.txt
xx-PC$          smss.exe

LOCAL SERVICE   svchost.exe

xx              taskhost.exe

我需要构建一些看起来像这样的东西。

[ {A: 84 , B: 17 , C: 11 } ]

所以我需要一个具有附加属性的新结构(这种情况颜色),它取决于初始键值。 “A”,“B”或“C”。

我没有要求一个完整的答案(如果你不想让一个人随意做),我只想知道这种操作需要哪种功能。

3 个答案:

答案 0 :(得分:4)

使用Object.keysArray.map函数和辅助&#34; 颜色映射&#34;的解决方案对象:

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"
    }
]

答案 1 :(得分:2)

你可以使用 for..in 来循环你的键,然后映射一个新对象:

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});
}

答案 2 :(得分:2)

你不需要破坏任何东西,一个简单的循环就足以创建新的结构:

var result = [];
for (var prop in input[0])
     result.push({
         name:  prop,
         value: input[0][prop],
         color: colorForName(prop)
     });