2015-06-14 35 views
1

我的JSON看起來像這樣合併JSON對象具有相同的「鑰匙」,並添加自己的「價值」使用JavaScript

{"rows":[ 
    {"key":["zeit.de"],"value":98}, 
    {"key":["google.com"],"value":49}, 
    {"key":["spiegel.de"],"value":20}, 
    {"key":["spiegel.de"],"value":12}, 
    {"key":["spiegel.de"],"value":20}, 
    {"key":["spiegel.de"],"value":12}, 
    {"key":["netmng.com"],"value":49}, 
    {"key":["zeit.de"],"value":300} 
]} 

,我正在尋找一個解決方案來合併所有相同的密鑰和添加的值將鍵合併在一起得到看起來像這樣的東西。

{"rows":[ 
    {"key":["zeit.de"],"value":398}, 
    {"key":["google.com"],"value":49}, 
    {"key":["spiegel.de"],"value":54}, 
    {"key":["netmng.com"],"value":49} 
]} 

感謝您的回答。

+0

使用+ =將對象加載到新對象並將其加載到新對象中,以將新值添加到前一對象中。 – Leeish

回答

2

var json = '{"rows":[{"key":["zeit.de"],"value":98},{"key":["google.com"],"value":49},{"key":["spiegel.de"],"value":20},{"key":["spiegel.de"],"value":12},{"key":["spiegel.de"],"value":20},{"key":["spiegel.de"],"value":12},{"key":["netmng.com"],"value":49},{"key":["zeit.de"],"value":300}]}'; 
 
var obj = JSON.parse(json); 
 

 
var newObj = {}; 
 
for(i in obj['rows']){ 
 
var item = obj['rows'][i]; 
 
    if(newObj[item.key[0]] === undefined){ 
 
     newObj[item.key[0]] = 0; 
 
    } 
 
    newObj[item.key[0]] += item.value; 
 
} 
 

 
var result = {}; 
 
result.rows = []; 
 
for(i in newObj){ 
 
    result.rows.push({'key':i,'value':newObj[i]}); 
 
} 
 
console.log(result);

https://jsfiddle.net/s8rp84qc/

0

你可以嘗試這樣的事情:

var newData = {rows: []}, 
    index; 

for (var i = 0; i < data.rows.length;i++){ 
    index = newDataContains(data.rows[i].key); 
    if (index == -1){ 
     newData.rows.push({key: data.rows[i].key, value: data.rows[i].value}); 
    } else { 
     newData.rows[index].value += data.rows[i].value; 
    } 
} 

function newDataContains(key){ 
    for (var i=0; i < newData.rows.length; i++){ 
     if (JSON.stringify(newData.rows[i].key) == JSON.stringify(key)) { 
      return i; 
      break; 
     } 
    } 
    return -1; 
} 

的jsfiddle: https://jsfiddle.net/9p81g5j6/

3

這裏是一個ALTERNA使用ECMA腳本Array功能forEachsomefilter TE溶液:

var data = { 
 
    "rows": [{ 
 
    "key": ["zeit.de"], 
 
    "value": 98 
 
    }, { 
 
    "key": ["google.com"], 
 
    "value": 49 
 
    }, { 
 
    "key": ["spiegel.de"], 
 
    "value": 20 
 
    }, { 
 
    "key": ["spiegel.de"], 
 
    "value": 12 
 
    }, { 
 
    "key": ["spiegel.de"], 
 
    "value": 20 
 
    }, { 
 
    "key": ["spiegel.de"], 
 
    "value": 12 
 
    }, { 
 
    "key": ["netmng.com"], 
 
    "value": 49 
 
    }, { 
 
    "key": ["zeit.de"], 
 
    "value": 300 
 
    }] 
 
}; 
 

 
var merged = { 
 
    rows: [] 
 
}; 
 

 
data.rows.forEach(function(sourceRow) { 
 
    debugger; 
 
    if(!merged.rows.some(function(row) { return row.key[0] == sourceRow.key[0]; })) { 
 
    merged.rows.push({ key: [sourceRow.key[0]], value: sourceRow.value }); 
 
    } else { 
 
    var targetRow = merged.rows.filter(function(targetRow) { return targetRow.key[0] == sourceRow.key[0] })[0]; 
 
    
 
    targetRow.value += sourceRow.value; 
 
    } 
 
}); 
 

 
document.getElementById("result").textContent = JSON.stringify(merged);
<div id="result"></div>

0

可以使用lodash

let result = [{'a': 3, 'b': 2}, {'a': 4, 'c': 1}, {'a': 4, 'c': 1}]; 
let m = _.reduce((_.uniq(_.flattenDeep(_.map(result, i => _.keys(i))))), function (s, v) { 
    s[v] = _.sumBy(result, function (o) { 
     return o[v]; 
    }); 
    return s 
}, {}); 

console.log(m); // { a: 11, b: 2, c: 2 } 
0

JSON看起來象下面這樣:2的情況 鏈接常見的當通過角色-id

  1. 角色的ID /名稱具有管理員:

    [{"Key":"value1"},{"key":"value2"},{"key":"value3"}] 
    
  2. 角色的ID /名稱具有測試

    [{"Key":"value1"},{"key":"value3"}] 
    

沒有鍵:值2是有計

對於例如:

全局變量字符串a,b;

要採取一切從鍵值對的值,如果它已經從JSON值2和值3

即:管理 走了=「既」

檢查儀 如果僅具有值3然後 b =「單個」

相關問題