I have this data structure:
const data = [
{
id: "1",
name: "first item",
T1_something: 21,
T1_anotherthing: 15,
T1_hello: 98,
T2_coding: 12.3,
T2_world: 4.1,
T2_different: 2.5
},
{
id: "2",
name: "second item",
T1_something: 3,
T1_anotherthing: 12.6,
T1_hello: 64.1,
T2_coding: 71.3,
T2_world: 4.5,
T2_different: 3.3
}
];
I want to get only properties where the property name matches the following regex /^T\d/
So my desired output is this:
const desiredResult = [
{
T1_something: 21,
T1_anotherthing: 15,
T1_hello: 98,
T2_coding: 12.3,
T2_world: 4.1,
T2_different: 2.5
},
{
T1_something: 3,
T1_anotherthing: 12.6,
T1_hello: 64.1,
T2_coding: 71.3,
T2_world: 4.5,
T2_different: 3.3
}
];
How do I go about doing this filtering based on a regex in an array of objects?
CodePudding user response:
const data = [
{
id: "1",
name: "first item",
T1_something: 21,
T1_anotherthing: 15,
T1_hello: 98,
T2_coding: 12.3,
T2_world: 4.1,
T2_different: 2.5
},
{
id: "2",
name: "second item",
T1_something: 3,
T1_anotherthing: 12.6,
T1_hello: 64.1,
T2_coding: 71.3,
T2_world: 4.5,
T2_different: 3.3
}
];
const filterBasedOnProp = (elements, pattern) => {
const regex = new RegExp(pattern)
return elements.map((element) => Object.keys(element).reduce((accumulator, key) => {
if (key.match(regex)) accumulator[key] = element[key]
return accumulator
}, {}))
}
console.log(filterBasedOnProp(data, "^T"))
CodePudding user response:
My solution
const desiredResult = data.map(o=>{
const newO={};
Object.keys(o).filter(oKey=>/^T\d/.test(oKey)).forEach(oKey=>{
newO[oKey]=o[oKey]
})
return newO;
})
CodePudding user response:
// const data = ...
// const regexp = ...
function filterMyDataProperties(data, regexp) {
return data.map(item => {
return Object.keys(item).reduce((newItem, key) => {
if (regexp.test(key)) {
newItem[key] = item[key]
}
return newItem
}, {})
})
}
const result = filterMyDataProperties(data, regexp);