javascript - 通过减去属性来获取两个对象的差异

标签 javascript arrays object-properties

我试图找出两个对象之间的差异

previousChart: {BWP: 1, ZAR: 1.3, USD: 0.09324, number: 1},
currentChart: {BWP: 1, ZAR: 1.35, USD: 0.01, number: 2}

期望的答案是:

newObject ={BWP: 0, ZAR: 0.05, USD: 0.08324, number: -1}

请不要问我做了什么,因为这是最后一个阶段,因为这是我代码的最后一部分,如果您有兴趣知道我在这里做了什么,那就是:

rates = [
{BWP: 1, ZAR: 1.3, USD: 0.09324, number: 1},
{BWP: 1, ZAR: 1.35, USD: 0.01, number: 2},
{BWP: 1, ZAR: 1.3456, USD: 0.09234, number: 3},
{BWP: 1, ZAR: 1.27894, USD: 0.06788, number: 4}
]

newRate = [];

for(let i in rates){

    if( i - 1 === -1 ){
        previousChart = rates[0];
    }else{
        previousChart = rates[i - 1];
    }
    let currentChart = rates[i];

}

最佳答案

您可以循环遍历一个对象的 Object.keys() 并使用 reduce() 减去另一个对象。这假设两个对象具有相同的键。

let previousChart =  {BWP: 1, ZAR: 1.3, USD: 0.09324, number: 1};
let currentChart = {BWP: 1, ZAR: 1.35, USD: 0.01, number: 2};

let newObj = Object.keys(previousChart).reduce((a, k) => {
    a[k] = previousChart[k] - currentChart[k];
    return a;
}, {});

console.log(newObj);

当然,您可以添加一些代码来将浮点处理为您想要的精度。

您可以将其变成一个函数,这样您就可以轻松地使用值数组并将它们全部相减:

let rates = [
    {BWP: 1, ZAR: 1.3, USD: 0.09324, number: 1},
    {BWP: 1, ZAR: 1.35, USD: 0.01, number: 2},
    {BWP: 1, ZAR: 1.3456, USD: 0.09234, number: 3},
    {BWP: 1, ZAR: 1.27894, USD: 0.06788, number: 4}
];

function subtract(r1, r2) {
  return Object.keys(r1).reduce((a, k) => {
      a[k] = r1[k] - r2[k];
      return a;
  }, {});
}

let total = rates.reduce((a, c) => subtract(a, c));

// subtract all values of rates array
console.log(total);

关于javascript - 通过减去属性来获取两个对象的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51013088/

相关文章:

javascript - 使用javascript的可折叠元素如何默认折叠

javascript - ReactJS 条件渲染 IF/OR

php - 使用 PHP 在多个数组中查找公共(public)值

猫头鹰保护 : Using the same Object property for different Domains/Ranges

php - 我可以创建一个不能在运行时动态添加属性的 PHP 类吗?

php - 如何将javascript变量数据发送到php

Javascript日期,月份解析问题的最后一天

ruby - 将一个数组翻译成一些数组

javascript - 基于动态参数过滤数组

javascript - 如何通过 MongoDB 驱动程序 (node.js) 向对象添加属性(属性名称是可变的)