Получите разницу двух объектов, вычтя свойства - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь получить разницу между двумя объектами

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];

}

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Если я правильно понимаю, вы ищете массив, который является разностью каждого значения в предыдущих.

Давайте предположим, что это ваш ввод

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

ИВы хотите, чтобы массив как

{BWP: 1, ZAR: 1.3, USD: 0.09324, number: 1}

был результатом.Тогда это сделает работу

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);
0 голосов
/ 24 июня 2018

Вы можете просто перебрать 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);
...