Home > other >  Comparing two arrays - removing element from array based on object keys
Comparing two arrays - removing element from array based on object keys

Time:02-08

I have two objects.

const arrayOne = [
  {
label: "Categories",
to: "/categories",
id: "product_type",
  },
  {
label: "Colors",
to: "/colors",
id: "color",
  },
  {
label: "Materials",
to: "/materials",
id: "material",
  },
  {
label: "Sizes",
to: "/sizes",
id: "sizes",
  },
  {
label: "Designers",
to: "/designers",
id: "designer_slug",
  },
  {
label: "Stores",
to: "/stores",
id: "retailer_slug",
  },
];

const arrayTwo = [
{
  id: "gender",
  label: "Gender",
  lazy_loaded: false,
},
{
  id: "product_type",
  label: "Category",
  lazy_loaded: false,
},
{
  id: "quick_filters",
  label: "Quick filters",
  lazy_loaded: false,
},
{
  id: "final_price",
  label: "Price",
  lazy_loaded: false,
},
{
  id: "color",
  label: "Color",
  lazy_loaded: false,
},
{
  id: "material",
  label: "Material",
  lazy_loaded: false,
},
{
  id: "designer_slug",
  label: "Brand",
  lazy_loaded: true,
},
{
  id: "retailer_slug",
  label: "Store",
  lazy_loaded: true,
},
  ];

As you can see they both have the key 'id'. If the IDs in arrayOne aren't in arrayTwo, I would like them to be removed from arrayOne (the whole object). So in this case, only the object with "sizes" should be removed from arrayOne. How would I go about doing this? Thanks in advance!

CodePudding user response:

you could utilize filter:

const newArrayOne = arrayOne.filter(x => arrayTwo.find(y => y.id === x.id))

CodePudding user response:

You could use a Set with id and filter the other array.

const
    arrayOne = [{ label: "Categories", to: "/categories", id: "product_type" }, { label: "Colors", to: "/colors", id: "color" }, { label: "Materials", to: "/materials", id: "material" }, { label: "Sizes", to: "/sizes", id: "sizes" }, { label: "Designers", to: "/designers", id: "designer_slug" }, { label: "Stores", to: "/stores", id: "retailer_slug" }],
    arrayTwo = [{ id: "gender", label: "Gender", lazy_loaded: false }, { id: "product_type", label: "Category", lazy_loaded: false }, { id: "quick_filters", label: "Quick filters", lazy_loaded: false }, { id: "final_price", label: "Price", lazy_loaded: false }, { id: "color", label: "Color", lazy_loaded: false }, { id: "material", label: "Material", lazy_loaded: false }, { id: "designer_slug", label: "Brand", lazy_loaded: true }, { id: "retailer_slug", label: "Store", lazy_loaded: true }],
    two = new Set(arrayTwo.map(({ id }) => id)),
    result = arrayOne.filter(({ id }) => two.has(id));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

  •  Tags:  
  • Related