Удалить несколько объектов в массиве с помощью Ramda - PullRequest
0 голосов
/ 23 января 2020

есть ли в ramda способ удалить несколько объектов в ramda.

Вот мой массив

const availableFeatures = [
  {
    id: 1,
    name: "TEST 1",
  },
  {
    id: 2,
    name: "TEST 2",
  },
  {
    id: 3,
    name: "TEST 3"
  }
]

Я хочу удалить объект, содержащий идентификаторы 1 и 2.

Ответы [ 5 ]

1 голос
/ 23 января 2020

Мне нравится использовать where для построения предикатов:

const x = reject(where({id: flip(includes)([1, 2])}))

console.log(x(availableFeatures));
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>
<script>const {reject, where, flip, includes} = R;</script>
<script>
const availableFeatures =
  [ { id: 1
    , name: "TEST 1"
    },
    { id: 2
    , name: "TEST 2",
    },
    { id: 3
    , name: "TEST 3"
    }
  ];
</script>
0 голосов
/ 23 января 2020

также что-то вроде этого будет делать:

const blacklist = R.propSatisfies(
  R.includes(R.__, [1, 2]), 
  'id',
);

const fn = R.reject(blacklist);

// ----

const data = [
  {
    id: 1,
    name: "TEST 1",
  },
  {
    id: 2,
    name: "TEST 2",
  },
  {
    id: 3,
    name: "TEST 3"
  }
];

console.log(fn(data));
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js" integrity="sha256-xB25ljGZ7K2VXnq087unEnoVhvTosWWtqXB4tAtZmHU=" crossorigin="anonymous"></script>
0 голосов
/ 23 января 2020

Вы можете использовать reject():

const availableFeatures = [
  {
    id: 1,
    name: "TEST 1",
  },
  {
    id: 2,
    name: "TEST 2",
  },
  {
    id: 3,
    name: "TEST 3"
  }
];

const result = R.reject(({id}) => id === 1 || id === 2, availableFeatures);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
0 голосов
/ 23 января 2020

Вы можете использовать это решение

const availableFeatures = [
  {
    id: 1,
    name: "TEST 1",
  },
  {
    id: 2,
    name: "TEST 2",
  },
  {
    id: 3,
    name: "TEST 3"
  }
]

const result = R.reject(
    R.anyPass([
        R.propEq('id', 1),
        R.propEq('id', 2)
    ])
)(availableFeatures);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js" integrity="sha256-xB25ljGZ7K2VXnq087unEnoVhvTosWWtqXB4tAtZmHU=" crossorigin="anonymous"></script>
0 голосов
/ 23 января 2020

Использование R.reject() с R.propSatisfies() может позволить вам удалить все те объекты в вашем массиве, где значение id для объекта <= равно 2, например так:

const availableFeatures = [ { id: 1, name: "TEST 1", }, { id: 2, name: "TEST 2", }, { id: 3, name: "TEST 3" } ];

const res = R.reject(R.propSatisfies(R.gte(2), 'id'))(availableFeatures);
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js" integrity="sha256-xB25ljGZ7K2VXnq087unEnoVhvTosWWtqXB4tAtZmHU=" crossorigin="anonymous"></script>
...