objeto eliminar elemento javascript json merge key value

eliminar - Fusiona el objeto JSON con la misma "clave" y agrega su "valor" usando JavaScript



eliminar elemento de un objeto javascript (5)

Mi JSON se ve así

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

y estoy buscando una solución para fusionar todas las mismas claves y agregar los valores de las teclas fusionadas para obtener algo así.

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

Gracias por responder


Aquí hay una solución alternativa que utiliza las funciones de la Array ECMA-Script forEach , some y filter :

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>


Puedes probar algo como esto:

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/


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/


puedes usar 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 }


JSON se ve a continuación: 2 escenario Url es común cuando pasa la función de rol

  1. role-id / name tiene admin:

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

  2. role-id / name tiene Tester

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

sin clave: value2 está ahí para Tester

Por ejemplo:

Variable global cadena a, b;

quiere tomar todos los valores del par clave-valor si tiene value2 y value3 del JSON

es decir: admin go for a = "both"

verifique el probador si solo tiene value3 y luego b = "single"