Фильтровать объект по другому объекту с несколькими значения - PullRequest
1 голос
/ 09 апреля 2020

Когда я получаю данные от .subscribe, я хотел бы отфильтровать необработанные данные по объекту с переменным множественным ключом. Как я могу это сделать?

      let oriDa: any[] = [
        {yr: 2015, mth: "Jan", A: 23, B: 29},
        {yr: 2015, mth: "Feb", A: 24, B: 30},
        {yr: 2015, mth: "Mar", A: 25, B: 31},
        {yr: 2016, mth: "Jan", A: 26, B: 32},
        {yr: 2016, mth: "Feb", A: 27, B: 33},
        {yr: 2016, mth: "Mar", A: 28, B: 34},
    ];

      let cons: any[] = [
        {
          yr: 2015,
          mth: "Feb"
        }
      ]

Результат будет:

res = [{yr:2015, mth:feb, A:24, B:30}]

Ответы [ 5 ]

2 голосов
/ 09 апреля 2020
const conn = cons[0];

const res = oriDa.filter(x => x.yr === conn.yr && x.mth === conn.mth);
1 голос
/ 09 апреля 2020

если у вас есть несколько объектов в массиве cons, то вы можете использовать фильтр и некоторые методы массива, мы можем сделать что-то подобное

let filterdData = oriDa.filter(item => {
    return cons.some(con => {
        return item.yr === con.yr && item.mth === con.mth
    });
});
1 голос
/ 09 апреля 2020

Вы можете использовать filter() метод для задачи. Однако это зависит от того, будете ли вы sh использовать более одного объекта в переменной cons.

var oriDa = [
  {yr: 2015, mth: "Jan", A: 23, B: 29},
  {yr: 2015, mth: "Feb", A: 24, B: 30},
  {yr: 2015, mth: "Mar", A: 25, B: 31},
  {yr: 2016, mth: "Jan", A: 26, B: 32},
  {yr: 2016, mth: "Feb", A: 27, B: 33},
  {yr: 2016, mth: "Mar", A: 28, B: 34},
];

var cons = [
  {
    yr: 2015,
    mth: "Feb"
  }
]

console.log(oriDa.filter(item => {
  if (item.yr === cons[0].yr && item.mth === cons[0].mth) {
    return item;
  }
}));
1 голос
/ 09 апреля 2020

, если вы не знаете, что поля объекта находятся внутри объекта cons:

let filtered = oriDa.filter(el => cons.some(consEl => Object.keys(consEl).every(key => consEl[key] === el[key])))

то же самое в более читаемой форме

        let filtered = oriDa.filter( el => {
        return cons.some(consEl => {
            const allKeysToCompare = Object.keys(consEl);
            return allKeysToCompare.every(key => consEl[key] === el[key]);
        })
    });
1 голос
/ 09 апреля 2020
const filtered = oriDa.filter(el => cons.some(con => con.yr === el.yr && con.mth === el.mth));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...