Фильтровать массив по некоторым критериям ES6 - PullRequest
0 голосов
/ 19 июня 2019

Привет, ребята. Мне нужен код в ES6 javascript, который решает эту проблему. Мои данные - это массив объектов, подобных следующемуследующий результат

result = [
{ 
  name: "SI",
  value: 9
},
{
  name: "MI",
  value: 3
}
]

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Вы можете использовать array#reduce для накопления отдельных name в накопителе объектов. Для каждого сохраненного объекта сравните value с сохраненным value и обновите, если оно меньше текущего value

let arr = [ { name:"SI", value:3 }, { name:"MI", value:2 }, { name:"SI", value:7 }, { name:"SI", value:9 }, { name:"MI", value:3 } ],
    result = Object.values(arr.reduce((r,{name, value}) => {
      r[name] = r[name] || {name, value: 0};
      if(r[name].value < value)
        r[name].value = value;
      return r;
    },{}));
console.log(result);
.as-console-wrapper {max-height: 100% !important; top: 0;}
0 голосов
/ 19 июня 2019

Вероятно, наиболее эффективно, если сначала перейти к промежуточному объекту, а затем отобразить записи этого объекта:

const result = Object.entries(array.reduce((a, {name, value}) => {
  a[name] = a[name] && a[name] >= value ? a[name] : value;
  return a;
}, {})).map(([name, value]) => ({name, value}));

Полный фрагмент:

const array = [{
    name: "SI",
    value: 3
  },
  {
    name: "MI",
    value: 2
  },
  {
    name: "SI",
    value: 7
  },
  {
    name: "SI",
    value: 9
  },
  {
    name: "MI",
    value: 3
  }
];

const result = Object.entries(array.reduce((a, {name, value}) => {
  a[name] = a[name] && a[name] >= value ? a[name] : value;
  return a;
}, {})).map(([name, value]) => ({name, value}));

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...