2016-11-04 13 views
-1

集計関数を実装しましたが、私の今の唯一の問題は、キー:値の形式が失われていることです。例えば[{name:"Apples",val:8},{name:"Banana",val: 9}]です。JSONオブジェクトの再構築方法

function agrregate(a){ 
    var targetObj = {}; 
    var result; 

    var b = JSON.parse(JSON.stringify(a)); 
    var trees= b.length; 

    if(!trees){ 
     trees = 0 
    } 
    for (var i = 0; i < trees; i++) { 
     if (!targetObj.hasOwnProperty(b[i].key)) { 
      targetObj[b[i].key] = 0; 
     } 
     targetObj[b[i].key] += b[i].val; 
    } 
    result = JSON.stringify(targetObj); 
    return result; 
} 

これは、agrregate関数が完了したときの結果です。

{"Apple":8,"Banana":9} 

代わりの

{name:"Apple", val:8}, {name:"Banana", val:9} 
+1

JSON(またはJS)を使用し、バックオブジェクトの配列を取得するには、それを行うことはできません'{name: 'a'、name: 'b'} 'は' {name:' b '} 'に評価されます – eithed

+0

ソースデータはどのように見えますか? – crashmstr

答えて

1

集約する減速機を使用してください。あなたはJSON stringify/parseで何かをする必要はありません。同じ2で、あなたがオブジェクトを持つことができない -

あなたはmapObject.keys

var test = [{name:"Apples",val:5},{name:"Banana",val: 9},{name:"Apples",val:3}] 
 

 
var aggregate = function(arr) { 
 
    return arr.reduce(function(result, obj) { // Create one object (result) 
 
    result[obj.name] = (result[obj.name] || 0) + obj.val; // Add a new key/or increase 
 
    return result // Return the object 
 
    }, {}); 
 
}; 
 

 
var wrap = function(obj) { 
 
    return Object.keys(obj) // Create an array of keys 
 
    .map(function(key) { 
 
     return { // Specify the format 
 
     name: key, 
 
     val: obj[key] 
 
     }; 
 
    }); 
 
}; 
 

 
console.log(aggregate(test)); 
 
console.log(wrap(aggregate(test)));

+0

代わりにありがとう、しかし私が今必要なのは、キー値のペアループを行うことができることです。 –

+0

@MadulaShokengSelowaあなたcan *できます。これはうまく動作し、あなたの望む出力が得られます。 –

+0

'aggregate'はあなたを配列からオブジェクトに変換し、' wrap'はあなたをオブジェクトから配列にします。他に何が必要なのか分かりませんが、詳しいことはできますか? – user3297291

関連する問題