Tarun Bhati
Tarun Bhati

Reputation: 356

Map an array as per true or false set in another array

I have an array of item "mockData" & a Filter array "filter" in angular 8:

filter=[
{column:"name",show:true},
{column:"Sex",show:false},
];

mockData=[
{name:"test",sex:"m"},
{name:"test2",sex:"m"},
{name:"test3",sex:"f"},
{name:"test4",sex:"f"},
];

I want to map only the columns of mockData which are set as true in filter array.

result should look something like this.

[
{name:"test"},
{name:"test2"},
{name:"test3"},
{name:"test4"},
]

it should check in filter mandatorily.

Upvotes: 1

Views: 60

Answers (1)

Harry Chang
Harry Chang

Reputation: 389

const filter = [
  {
    column: "name",
    show: true
  },
  {
    column: "sex",
    show: false
  }
];

const mockData = [
  {
    name: "test",
    sex: "m"
  },
  {
    name: "test2",
    sex: "m"
  },
  {
    name: "test3",
    sex: "f"
  },
  {
    name: "test4",
    sex: "f"
  }
];

const filteredMockData = mockData.map(data =>
  Object.entries(data).reduce(
    (result, [key, value]) =>
      filter.find(f => f.column === key && f.show)
        ? { ...result, [key]: value }
        : result,
    {}
  )
);

console.log(filteredMockData);

Upvotes: 1

Related Questions