首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过减去属性得到两个对象的差异

通过减去属性得到两个对象的差异
EN

Stack Overflow用户
提问于 2018-06-25 03:04:31
回答 2查看 3.6K关注 0票数 3

我在试着弄清楚两个物体之间的区别

代码语言:javascript
复制
previousChart: {BWP: 1, ZAR: 1.3, USD: 0.09324, number: 1},
currentChart: {BWP: 1, ZAR: 1.35, USD: 0.01, number: 2}

想要的答案是:

代码语言:javascript
复制
newObject ={BWP: 0, ZAR: 0.05, USD: 0.08324, number: -1}

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

代码语言:javascript
复制
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];

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-25 03:09:18

您可以只遍历一个对象的Object.keys(),然后使用reduce()减去另一个对象。这假设两个对象具有相同的关键字。

代码语言:javascript
复制
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);

当然,您可以添加一些代码来将浮点处理到所需的精度。

您可以将其转换为一个函数,这将允许您轻松地处理一组值并将它们全部相减:

代码语言:javascript
复制
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);

票数 3
EN

Stack Overflow用户

发布于 2018-06-25 03:20:52

如果我没理解错的话,你要找的数组是前面几个数组中每个值的差。

让我们假设这是您的输入

代码语言:javascript
复制
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}
]

你想要一个像这样的数组

代码语言:javascript
复制
{BWP: 1, ZAR: 1.3, USD: 0.09324, number: 1}

就是结果。这样就可以完成任务了

代码语言:javascript
复制
var 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}
]

// I use the last object as the "template"
var result = rates[rates.length - 1]; 
var keys = Object.keys(result);

for (var i = rates.length - 1; i > 0; i --) {
  keys.forEach(function (elem) {
    result[elem] -= rates[i-1][elem];
  });
}

console.log(result);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51013088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档