Harsha Murupudi
Harsha Murupudi

Reputation: 573

JavaScript Object grouping and filtering

How to separate all fields whose key ends with 0x into a separate object/array using filter.

That is, all 00s, 01s, 02s must be filters out into a separate object or array.

The use the object entries to separate it by index but it fails when field is missing. So the day here is dynamic i.e sometime some fields are not entered. I guess filtering is the only way?

 {
     "hotel00": "asdasd",
      "adult00": "asdasd",
      "child00": "asdasd",
      "infant00": "asdasd",
      "hotel01": "asdasd",
      "adult01": "asdasd",
      "child01": "asdasd",
      "infant01": "asdas",
      "hotel02": "asdasdas",
      "adult02": "asdasd",
      "child02": "asdasd",
      "infant02": "asdasd",
      "hotel10": "asdasd",
      "adult10": "asdasd",
      "child10": "asdsd",
      "infant10": "asd",
      "hotel11": "asdsd",
      "adult11": "asd",
      "child11": "asdsd",
      "infant11": "asd",
      "hotel12": "asdasd",
      "adult12": "asdasd",
      "child12": "asdasdasd",
      "infant12": "asdsdasd",
    }

Output

       {
  "a": [
    {
      "hotel00": "asdasd",
      "adult00": "asdasd",
      "child00": "asdasd",
      "infant00": "asdasd",
    },
    {
      "hotel01": "asdasd",
      "adult01": "asdasd",
      "child01": "asdasd",
      "infant01": "asdas",
    },
    {
      "hotel02": "asdasdas",
      "adult02": "asdasd",
      "child02": "asdasd",
      "infant02": "asdasd",
    }
  ],
    "b": [
      {
        "hotel10": "asdasd",
        "adult10": "asdasd",
        "child10": "asdsd",
        "infant10": "asd",
      },
      {
        "hotel11": "asdsd",
        "adult11": "asd",
        "child11": "asdsd",
        "infant11": "asd",
      },
      {
        "hotel12": "asdasd",
        "adult12": "asdasd",
        "child12": "asdasdasd",
        "infant12": "asdsdasd",
      }
    ]
}

Upvotes: 0

Views: 116

Answers (1)

Sabbin
Sabbin

Reputation: 2445

Hope this does delivers the answer to your question

const obj =  {
  "hotel00": "asdasd",
   "adult00": "asdasd",
   "child00": "asdasd",
   "infant00": "asdasd",
   "hotel01": "asdasd",
   "adult01": "asdasd",
   "child01": "asdasd",
   "infant01": "asdas",
   "hotel02": "asdasdas",
   "adult02": "asdasd",
   "child02": "asdasd",
   "infant02": "asdasd",
   "hotel10": "asdasd",
   "adult10": "asdasd",
   "child10": "asdsd",
   "infant10": "asd",
   "hotel11": "asdsd",
   "adult11": "asd",
   "child11": "asdsd",
   "infant11": "asd",
   "hotel12": "asdasd",
   "adult12": "asdasd",
   "child12": "asdasdasd",
   "infant12": "asdsdasd",
 }
 
const {a,b,c,d,e,f} = Object.keys(obj).reduce(({a,b,c,d,e,f}, val, index) => ({
     a: /00\b(?<=\w)/.test(val)  ? {...a, [val]:obj[val]} : a,
     b: /01\b(?<=\w)/.test(val)  ? {...b, [val]:obj[val]} : b,
     c: /02\b(?<=\w)/.test(val)  ? {...c, [val]:obj[val]} : c,
     d: /10\b(?<=\w)/.test(val)  ? {...d, [val]:obj[val]} : d,
     e: /11\b(?<=\w)/.test(val)  ? {...e, [val]:obj[val]} : e,
     f: /12\b(?<=\w)/.test(val)  ? {...f, [val]:obj[val]} : f,
   }),{a:{},b:{},c:{},d:{},e:{},f:{}})

 const results = {
   a: [a,b,c],
   b: [d,e,f]
 };
 
 console.log(results)

LE second example

const obj =  {
  "hotel00": "asdasd",
   "adult00": "asdasd",
   "child00": "asdasd",
   "infant00": "asdasd",
   "hotel01": "asdasd",
   "adult01": "asdasd",
   "child01": "asdasd",
   "infant01": "asdas",
   "hotel02": "asdasdas",
   "adult02": "asdasd",
   "child02": "asdasd",
   "infant02": "asdasd",
   "hotel10": "asdasd",
   "adult10": "asdasd",
   "child10": "asdsd",
   "infant10": "asd",
   "hotel11": "asdsd",
   "adult11": "asd",
   "child11": "asdsd",
   "infant11": "asd",
   "hotel12": "asdasd",
   "adult12": "asdasd",
   "child12": "asdasdasd",
   "infant12": "asdsdasd",
 }

 const result = Object.keys(obj).reduce((acc,val)=>{
    ['00','01','02','10','11','12'].forEach((item, index) => {
      const x = index<3 ? 'a' : 'b';
      const i = index<3 ? index : index-3;
      acc[x][i] = val.substring(val.length-2) === item ? {...acc[x][i], [val]:obj[val]} : acc[x][i];
    })
    return acc;
 },{a:[],b:[]})

 console.log(result)

Upvotes: 2

Related Questions