Если объект JavaScript имеет тот же ключ с другим значением, Получить только последнее значение ключа дубликатов ключей - PullRequest
0 голосов
/ 17 марта 2020

Я использую java объекты массива сценариев для хранения данных, извлеченных из базы данных. Здесь я сохранил значение с теми же ключами. Если у объектов Javascript тот же ключ, но с разными значениями, мне нужно получить последний ключ и значение дубликатов

          var input = [ { month: 'Jan', value: 3 },
              { month: 'Jan', value: 3.5 },
              { month: 'Feb', value: 2.1 },
              { month: 'Mar', value: 6 },
              { month: 'Apr', value: 4.3 },
              { month: 'May', value: 5.5 },
              { month: 'Jun', value: 7 },
              { month: 'Jun', value: 9 },
              { month: 'Jul', value: 7 },
              { month: 'Jul', value: 9 },
              { month: 'Jul', value: 7 },
              { month: 'Aug', value: 9 },
              { month: 'Sep', value: 9 },
              { month: 'Sep', value: 9 },
              { month: 'Oct', value: 8 },
              { month: 'Oct', value: 5 },
              { month: 'Oct', value: 3 },
              { month: 'Nov', value: 12 },
              { month: 'Nov', value: 19.5 } ];

            var result = [];

            for (var i = 0; i < input.length; i++) {
                var data = input[i];
                var found=false;
                for(var j=0; j<result.length; j++) {
                    if(result[j].month === data.month) {
                        found=true;
                        result[j].value += data.value;
                        break;
                    }
                }
                if(!found) {
                    result.push(data);
                }
            }

            //The result array is your desired result
            console.log(result);

. В приведенном выше коде будут добавлены значения одного и того же ключа и отобразится результат. Но мне нужно получить последний ключ и значение дубликатов ключей. Например: имеет месяц: январь, значение: 3 и месяц: январь, значение: 3,5. Мне нужно получить только последнее значение ключа. (т.е.) месяц: январь, значение: 3,5

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Вы можете использовать уменьшение следующим образом, если порядок месяцев последовательный:

const input = [{ month: 'Jan', value: 3 }, { month: 'Jan', value: 3.5 }, { month: 'Feb', value: 2.1 }, { month: 'Mar', value: 6 }, { month: 'Apr', value: 4.3 }, { month: 'May', value: 5.5 }, { month: 'Jun', value: 7 }, { month: 'Jun', value: 9 }, { month: 'Jul', value: 7 }, { month: 'Jul', value: 9 }, { month: 'Jul', value: 7 }, { month: 'Aug', value: 9 }, { month: 'Sep', value: 9 }, { month: 'Sep', value: 9 }, { month: 'Oct', value: 8 }, { month: 'Oct', value: 5 }, { month: 'Oct', value: 3 }, { month: 'Nov', value: 12 }, { month: 'Nov', value: 19.5 }];

const result = [];

input.reduce((a, v, i) => {
  const eleIdx = a.findIndex(e => e.month === v.month);
  if (eleIdx > -1 && input[i - 1].month === v.month) {
    a[eleIdx].value = v.value;
  } else {
    a.push(v);
  }
  return a;
}, result);


console.log(result);
0 голосов
/ 17 марта 2020

При переборе массива присваивайте каждый объект объекту, ключом которого является месяц. Таким образом, если у более позднего элемента тот же месяц, что и у более раннего, более поздний элемент перезапишет предыдущий элемент на объекте.

var input = [ { month: 'Jan', value: 3 },
  { month: 'Jan', value: 3.5 },
  { month: 'Feb', value: 2.1 },
  { month: 'Mar', value: 6 },
  { month: 'Apr', value: 4.3 },
  { month: 'May', value: 5.5 },
  { month: 'Jun', value: 7 },
  { month: 'Jun', value: 9 },
  { month: 'Jul', value: 7 },
  { month: 'Jul', value: 9 },
  { month: 'Jul', value: 7 },
  { month: 'Aug', value: 9 },
  { month: 'Sep', value: 9 },
  { month: 'Sep', value: 9 },
  { month: 'Oct', value: 8 },
  { month: 'Oct', value: 5 },
  { month: 'Oct', value: 3 },
  { month: 'Nov', value: 12 },
  { month: 'Nov', value: 19.5 }
];
const obj = {};
for (const item of input) {
  obj[item.month] = item;
}
const output = Object.values(obj);
console.log(output);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...