Как отфильтровать объекты по объектам в Js - PullRequest
1 голос
/ 11 апреля 2020

Мой первый объект:

 {Color: [
         {display: "RED", value: "5433", count: "12"}
         {display: "Black", value: "5446", count: "37"}    
        ]
        Brand: [
         {display: "NIKAVI", value: "5458", count: "58", brand: }
         {display: "BOSCH", value: "5570", count: "7",}
         {display: "REPLAY", value: "5497", count: "132",}
        ]
        Category: [
         {display: "Motorbike Horns", value: "1320", count: "8"}
         {display: "LED Lamps", value: "1325", count: "3"}
        ]
    }

Мой второй объект:

{Brand: "5458", Color: "5446",Category:[1320,75]}

Я должен отфильтровать первый объект значение, используя значения второго объекта. Я много пробовал, но не смог найти отличных идей. Я работаю в reactJs.

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Вы можете просто перебрать пары ключ-значение для второго объекта, а затем использовать метод Array#find (или использовать метод Array#filter, если вам нужен массив или есть несколько), чтобы получить результат.

const obj1 = {Color: [
         {display: "RED", value: "5433", count: "12"},
         {display: "Black", value: "5446", count: "37"}    
        ],
        Brand: [
         {display: "NIKAVI", value: "5458", count: "58", brand: ''},
         {display: "BOSCH", value: "5570", count: "7",},
         {display: "REPLAY", value: "5497", count: "132",}
        ],
        Category: [
         {display: "Motorbike Horns", value: "1320", count: "8"},
         {display: "LED Lamps", value: "1325", count: "3"}
        ]
    };

;
const obj2={Brand: "5458", Color: "5446",Category:[1320,75]};



const res = {};

for (let [key, value] of Object.entries(obj2)) {
  res[key] = obj1[key].filter(o => Array.isArray(value) ? value.some(v => v == o.value) : o.value === value) 
}


console.log(res);
1 голос
/ 11 апреля 2020

Вы можете попробовать это;

firstObj = {Color: [
  {display: "RED", value: "5433", count: "12"},
  {display: "Black", value: "5446", count: "37"}    
 ],
 Brand: [
  {display: "NIKAVI", value: "5458", count: "58",},
  {display: "BOSCH", value: "5570", count: "7",},
  {display: "REPLAY", value: "5497", count: "132",}
 ]
};

secondObj={Brand: "5458", Color: "5446"}

// solution:
const result =Object.keys(secondObj).map(sk => firstObj[sk].filter(fo => fo.value === secondObj[sk]))
    
    
    console.log(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...