Reputation: 573
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
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