Reputation: 59
I have response like below
dropdown1: {enabled: true, label: "Country", eformVisible: false}
dropdown2: {enabled: false, label: "Dropdown2 Label", eformVisible: false, }
dropdown3: {enabled: false, label: "Dropdown3 Label", eformVisible: false, mandatory: "NOT_MANDATORY[enter link description here][1]", order: 32}
dropdown4: {enabled: false, label: "Dropdown4 Label", eformVisible: false, }
dropdown5: {enabled: false, label: "Dropdown5 Label", eformVisible: false, }
text1: {enabled: true, label: "Text1 Custom field", eformVisible: false, mandatory: "ADMIN_API", order: 0, …}
text2: {enabled: false, label: "Text2 Label ", eformVisible: false, mandatory: "NOT_MANDATORY", order: 1, …}
text3: {enabled: false, label: "Text3 Label ", eformVisible: false, mandatory: "NOT_MANDATORY", order: 2, …}
text4: {enabled: false, label: "Text4 Label ", eformVisible: false, mandatory: "NOT_MANDATORY", order: 3, …}
text5: {enabled: false, label: "Text5 Label ", eformVisible: false, mandatory: "NOT_MANDATORY", order: 4, …}
text6: {enabled: false, label: "Text6 Label ", eformVisible: false, mandatory: "NOT_MANDATORY", order: 5, …}
convert text 1,text2,text3 into text array and same dropdown object move into dropdown array .finally i need to bind this textbox and dropdown value using for loop if i am not wrong . this below i have written sample code
[1]: https://stackblitz.com/edit/angular-ivy-zzeijq
but from this difficult to find which one is textbox and drop down to bind in angular.
Upvotes: 1
Views: 92
Reputation: 189
My solution to these types of problems follow this structure
const children = Object.keys(obj)
.filter(key => <return true for the keys I want>)
.map(key => <Construct textbox based on obj[key]>)
Fill in the blanks and this will output an array of elements which can be bound to your parent element
Upvotes: 1
Reputation: 720
Create a function that helps you to filter data
according to the beginning of the string (data key):
function filter(data, query){
return Object.values(Object.keys(data)
.filter(key => new RegExp('^' + query, 'g').test(key))
.map((key) => data[key]));
}
And then use it according to your needs:
console.log(filter(data,'date'));
console.log(filter(data,'text'));
console.log(filter(data,'dropdown'));
Insights
Upvotes: 3
Reputation: 11
You can browse object by keys and build groupedItem object like following :
const obj = {
dropdown1: {enabled: true, label: "Country", eformVisible: false},
dropdown2: {enabled: false, label: "Dropdown2 Label", eformVisible: false, },
dropdown3: {enabled: false, label: "Dropdown3 Label", eformVisible: false, mandatory: "NOT_MANDATORY[enter link description here][1]", order: 32},
dropdown4: {enabled: false, label: "Dropdown4 Label", eformVisible: false, },
dropdown5: {enabled: false, label: "Dropdown5 Label", eformVisible: false, },
text1: {enabled: true, label: "Text1 Custom field", eformVisible: false, mandatory: "ADMIN_API", order: 0},
text2: {enabled: false, label: "Text2 Label ", eformVisible: false, mandatory: "NOT_MANDATORY", order: 1},
text3: {enabled: false, label: "Text3 Label ", eformVisible: false, mandatory: "NOT_MANDATORY", order: 2},
text4: {enabled: false, label: "Text4 Label ", eformVisible: false, mandatory: "NOT_MANDATORY", order: 3},
text5: {enabled: false, label: "Text5 Label ", eformVisible: false, mandatory: "NOT_MANDATORY", order: 4},
text6: {enabled: false, label: "Text6 Label ", eformVisible: false, mandatory: "NOT_MANDATORY", order: 5}
};
const grouped = { text: [], dropdown: [] };
Object.keys(obj).forEach((key) => {
(key.includes('text')) ? grouped.text.push({...obj[key], initialKey: key}) : grouped.dropdown.push({...obj[key], initialKey: key});
});
Upvotes: 1