У меня есть два разных объектазначения суммы два различных объектов
var objA = { a: 10, b: 20, c: 30 }; var objB = { a: 3, c: 6, d: 3 };
и я хочу суммировать их значение, как в этом примере ниже
{ a: 13, b: 20, c: 36, d: 3 }
У меня есть два разных объектазначения суммы два различных объектов
var objA = { a: 10, b: 20, c: 30 }; var objB = { a: 3, c: 6, d: 3 };
и я хочу суммировать их значение, как в этом примере ниже
{ a: 13, b: 20, c: 36, d: 3 }
Использования Array#reduce
методы
var objA = {
a: 10,
b: 20,
c: 30
};
var objB = {
a: 3,
c: 6,
d: 3
};
console.log(
// concatenate keys array
Object.keys(objA).concat(Object.keys(objB))
// or use Object.keys(Object.assign({},objA,objB))
// iterate to generate the object
.reduce(function(obj, k) {
// define object property, treat as 0 if not defined
obj[k] = (objA[k] || 0) + (objB[k] || 0);
// return object difference
return obj;
// set initial value as an empty object
}, {})
)
Или намного лучший способ, определяя начальное значение как копию второго объекта.
var objA = {
a: 10,
b: 20,
c: 30
};
var objB = {
a: 3,
c: 6,
d: 3
};
console.log(
// get property names array of objB
Object.keys(objA)
// iterate over array
.reduce(function(obj, k) {
// add value to existing property or update
obj[k] = (obj[k] || 0) + objA[k];
// return object reference
return obj;
// define initial value as an object which holds
// all the property and value in objB
}, Object.assign({}, objB))
)
Да, это то, что мне нужно. Хорошее решение ... Приветствия – Furious
var objA = { a: 10, b: 20, c: 30 }; var objB = { a: 3, c: 6, d: 3 };
var objC = {}
for (key in objA) {
\t if (objB.hasOwnProperty(key)) {
\t \t objC[key] = objA[key] + objB[key]
} else {
\t objC[key] = objA[key]
}
}
for (key in objB) {
\t if (!objC.hasOwnProperty(key)) {
if (objA.hasOwnProperty(key)) {
objC[key] = objA[key] + objB[key]
} else {
objC[key] = objB[key]
}
}
}
console.log(objC)
Сортировка решение с использованием Object.assign()
и Array.prototype.reduce()
функции:
var objA = { a: 10, b: 20, c: 30 },
objB = { a: 3, c: 6, d: 3},
merged = Object.assign({}, objA, objB);
var result = Object.keys(merged).reduce(function (r, k) {
r[k] = (merged[k] && objA[k] && objB[k])? merged[k] + objA[k] : merged[k];
return r;
}, {});
console.log(result);
мне очень нравится второе решение Пранав С Balan. Но я трачу немного времени, поэтому также отправляю свое решение :).
var objA = { a: 10, b: 20, c: 30 };
var objB = { a: 3, c: 6, d: 3 };
let params = Array.from(new Set(Object.keys(objA).concat(Object.keys(objB))));
let sum = params.map(param => (objA[param] || 0) + (objB[param] || 0));
console.log(params, sum);
что вы пробовали? –
@VilasKumkar Я пробовал с ** для ** в цикле ** с комбинацией ** Object.keys() ** .... Но только результат, который я получил, суммирует все из них, я имею в виду, что я получил 72 – Furious