У меня есть сценарий, в котором пользователь может выбирать элементы и удалять их, поэтому у меня есть два массива:

  1. Со значениями флажков (отмечены и индексированы)
  2. Фактические элементы, которые необходимо фильтровать на основе индекса проверенных значений.

Вот два массива и ожидаемый результат с использованием lodash.

const checked = [
  {
    index: 0,
    checked: false
  },
  {
    index: 1,
    checked: true //note second index is checked so we need to filter out second index from items array.
  },
];

const items = [
  {
    title: 'This is title 1',
    description: 'This is description 1',
    end_date: '2018-03-12 14:00:00',
    location: '3577 Rue de Bullion, Montréal, QC H2X 3A1, Canada',
    room: 401,
    start_date: '2018-03-12 13:00:00',
  },
  {
    title: 'This is title 2',
    description: 'This is description 2',
    end_date: '2018-03-12 14:00:00',
    location: '3577 Rue de Bullion, Montréal, QC H2X 3A1, Canada',
    room: 401,
    start_date: '2018-03-12 13:00:00',
  }
];


const result = [
  {
    title: 'This is title 1',
    description: 'This is description 1',
    end_date: '2018-03-12 14:00:00',
    location: '3577 Rue de Bullion, Montréal, QC H2X 3A1, Canada',
    room: 401,
    start_date: '2018-03-12 13:00:00',
  }
];
0
Kamran Khatti 14 Мар 2018 в 12:18

2 ответа

Лучший ответ

Вам нужно просто использовать функцию filter и получить индекс текущего объекта. Затем, используя этот индекс, перейдите к элементу n-th массива checked (я привожу это решение, потому что из массива checked видно, что ваш массив содержит состояния для всех флажков - отмечено и не отмечен) и проверьте его свойство checked.

const checked = [
  { index: 0, checked: false },
  { index: 1, checked: true }
];

const items = [
  {
    title: 'This is title 1',
    description: 'This is description 1',
    end_date: '2018-03-12 14:00:00',
    location: '3577 Rue de Bullion, Montréal, QC H2X 3A1, Canada',
    room: 401,
    start_date: '2018-03-12 13:00:00',
  },
  {
    title: 'This is title 2',
    description: 'This is description 2',
    end_date: '2018-03-12 14:00:00',
    location: '3577 Rue de Bullion, Montréal, QC H2X 3A1, Canada',
    room: 401,
    start_date: '2018-03-12 13:00:00',
  }
];

const filtered = items.filter((item, index) => !checked[index].checked);

console.log(filtered);
1
Suren Srapyan 14 Мар 2018 в 10:35

Вы можете просто сделать это.

var result=[];
checked.forEach(function (item) {
    if(item.checked)
    {
        result.push(items[item.index]);
    }
})

console.log(result);
0
Pawan sasanka 14 Мар 2018 в 09:56