Фильтровать массив объектов по другому массиву объектов с несколькими ключами - PullRequest
0 голосов
/ 03 сентября 2018

Ниже мой код. «Идентификатор» будет иметь то же значение. Я хочу фильтровать данные по нескольким ключам. Фильтр не работает должным образом.

let myArray = [
    {
        "id": "#prodstck",
        "date": "2018-07-24T16:43:21Z"
    },
    {
        "id": "#prodstck",
        "date": "2018-04-24T16:43:42Z"
    },
];

let filterArray = [
    {
        "id": "#prodstck",
        "date": "2018-07-24T16:43:21Z"
    }
];

 const filterFeed = myArray.filter(obj=> filterArray.some((f: any) =>
            f.id !== obj.id && f.date !== obj.date
        ));

Спасибо

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

Нечто подобное вернет элемент с меткой времени 16:43:21.

let myArray = [
    {
        "id": "#prodstck",
        "date": "2018-07-24T16:43:21Z"
    },
    {
        "id": "#prodstck",
        "date": "2018-04-24T16:43:42Z"
    },
];

let filterArray = [
    {
        "id": "#prodstck",
        "date": "2018-07-24T16:43:21Z"
    }
];


const result = myArray.filter(item => {
	return filterArray.some(filterItem => item.id === filterItem.id && item.date === filterItem.date)  
})

console.log(result);

Редактировать: Изменено. Найти на., Как у ОП изначально.

0 голосов
/ 03 сентября 2018

У вас правильная идея, просто ваше some условие неверно. Должно быть:

f.id === obj.id && f.date === obj.date

То есть, вы хотите, чтобы some вернул true (чтобы filter сохранил запись), когда оба параметра id и date соответствуют одной из записей во втором массиве.

Live Пример:

let myArray = [{
    "id": "#prodstck",
    "date": "2018-07-24T16:43:21Z"
  },
  {
    "id": "#prodstck",
    "date": "2018-04-24T16:43:42Z"
  },
];

let filterArray = [{
  "id": "#prodstck",
  "date": "2018-07-24T16:43:21Z"
}];

const filterFeed = myArray.filter(obj => filterArray.some((f/*: any*/) =>
  f.id === obj.id && f.date === obj.date
));

console.log(filterFeed);
0 голосов
/ 03 сентября 2018

Вам необходимо вернуться как из функции обратного вызова, так и из условия проверить на равенство

let myArray = [{
    "id": "#prodstck",
    "date": "2018-07-24T16:43:21Z"
  },
  {
    "id": "#prodstck",
    "date": "2018-04-24T16:43:42Z"
  },
];

let filterArray = [{
  "id": "#prodstck",
  "date": "2018-07-24T16:43:21Z"
}];

const filterFeed = myArray.filter(function(obj) {
  return filterArray.some(function(f) {
    return f.id === obj.id && f.date === obj.date
  })
});

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