1

I have a data like this:

export const keyOrders: {} = {
    "aa": { active: true, order: 0, val: "aaa" },
    "bb": { active: true, order: 6, val: "bbb" },
    "cc": { active: true, order: 2, val: "ccc" },
    "dd": { active: true, order: 7, val: "ddd" },
    "ee": { active: false, order: 4, val: "eee" },
    "ff": { active: true, order: 5, val: "fff" }
};

I am trying to push to array if active is only true and sort based on order value.

So far I have tried this

this.pdfKeys = Object.entries(this.dashboardElementsConfig)
                             .filter(([key, value]) => {
                                return value["active"];
                             })
                             .map(([key, value]) => {
                                return key;
                             })

I am not sure how to sort based on order number given.

nas
  • 2,289
  • 5
  • 32
  • 67

1 Answers1

5

You can folllow following steps.

  • Get an array of keys using Object.keys()
  • Use filter() to kets of all items with active:true
  • Use sort() to sort filtered array in ascending or descending order.
  • At the end use map() to convert each key to .val of the value

You can first all the active:true objects and then use and map() each key to desired value

let obj = {
    "aa": { active: true, order: 0, val: "aaa" },
    "bb": { active: true, order: 6, val: "bbb" },
    "cc": { active: true, order: 2, val: "ccc" },
    "dd": { active: true, order: 7, val: "ddd" },
    "ee": { active: false, order: 4, val: "eee" },
    "ff": { active: true, order: 5, val: "fff" }
};
let asc = Object.keys(obj)
                   .filter(x => obj[x].active)
                   .sort((a,b) => obj[a].order - obj[b].order)
                   .map(x => obj[x].val);
let dec = Object.keys(obj)
                    .filter(x => obj[x].active)
                    .sort((a,b) => obj[b].order - obj[a].order)
                    .map(x => obj[x].val);
console.log(asc)
console.log(dec)
Maheer Ali
  • 35,834
  • 5
  • 42
  • 73