Javascript loda sh Фильтр объектов в массиве по значению - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть следующий массив объектов:

var array = [
  {
    name: isSale,
    value: true
  },
  {
    name: isSale,
    value: false
  },
  {
    name: isNew,
    value: true
  }
]

Мне нужно отфильтровать массив, чтобы у меня было только 2 объекта в конце:

var array = [
  {
    name: isSale,
    value: true
  },
  {
    name: isNew,
    value: true
  }
]

Значение, если у меня есть И истинные и ложные значения для одного и того же имени (isSale) Мне нужно оставить объект с истинным значением.

Но если мой массив выглядит следующим образом:

var array = [
  {
    name: isSale,
    value: false
  },
  {
    name: isNew,
    value: true
  }
]

, что означает, что нет дублирующего объекта isSale, он должен оставаться таким, и объект с ложным значением не должен быть удален из массива.

Я предпочитаю решение с ES5 (вы можете написать его в ES6 / 7 и перенести его с помощью babel в ES5), и вы также можете использовать loda sh.

Спасибо за предложения и ура!

1 Ответ

0 голосов
/ 16 апреля 2020

Вы можете искать для того же name в наборе результатов и заменить, если прежнее значение false.

const
    filter = array => array.reduce((r, o) => {
        var index = r.findIndex(({ name }) => name === o.name)
        if (index === -1) r.push(o);
        else if (!r[index].value) r[index] = o;
        return r;
    }, []),
    array1 = [{ name: 'isSale', value: true }, { name: 'isSale', value: false }, { name: 'isNew', value: true }],
    array2 = [{ name: 'isSale', value: false }, { name: 'isNew', value: true }];

console.log(filter(array1));
console.log(filter(array2));
.as-console-wrapper { max-height: 100% !important; top: 0; }
...