Reputation: 1553
I have an object which contains two signals. (2)(2) Sheet1_TrainID
and (2)(2) Sheet1_Traintype
. Now user might want to see either trainID or Traintype. hence I have implemented this function:
my object look like this:
var myarray = [{
"captions": [
{
"name": "(2)(2) Sheet1_TrainID",
"attributes": {},
"filter": true,
"sort": true
},
{
"name": "(2)(2) Sheet1_Traintype",
"attributes": {},
"filter": true,
"sort": true
}
],
"rows": [
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "ICE",
"hiddenValue": "ICE",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "ICE",
"hiddenValue": "ICE",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "IC",
"hiddenValue": "IC",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1002,
"hiddenValue": 1002,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "IC",
"hiddenValue": "IC",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "ICE",
"hiddenValue": "ICE",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "IC",
"hiddenValue": "IC",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "IC",
"hiddenValue": "IC",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1002,
"hiddenValue": 1002,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "ICE",
"hiddenValue": "ICE",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "IC",
"hiddenValue": "IC",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
}
],
"direction": "vertical",
"attributes": {},
"clickable": false
}]
my function look like this:
function myfilter (value) {
var afterfilter = myarray.filter(data=>{
console.log(data)
return data['rows'].filter(cells=>{
return cells['cells'].filter(d=>{
return cells.toString().toLowerCase().includes("trainid".toLowerCase())
})
})
})
console.log(afterfilter)
}
myfilter()
Now how can i modify my function so that it can do the partial search and find the respective object both for captions and rows.
So after filtering the object, i should contains the data only for (2)(2) Sheet1_TrainID
and myarray should look like this:
var myarray = [{
"captions": [
{
"name": "(2)(2) Sheet1_TrainID",
"attributes": {},
"filter": true,
"sort": true
}],
"rows": [{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
} ]
}, and so on
so the array will not contain any object related to (2)(2) Sheet1_Traintype
How can i modify the function to achieve this.
var myarray = [{
"captions": [
{
"name": "(2)(2) Sheet1_TrainID",
"attributes": {},
"filter": true,
"sort": true
},
{
"name": "(2)(2) Sheet1_Traintype",
"attributes": {},
"filter": true,
"sort": true
}
],
"rows": [
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "ICE",
"hiddenValue": "ICE",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "ICE",
"hiddenValue": "ICE",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "IC",
"hiddenValue": "IC",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1002,
"hiddenValue": 1002,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "IC",
"hiddenValue": "IC",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "ICE",
"hiddenValue": "ICE",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "IC",
"hiddenValue": "IC",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "IC",
"hiddenValue": "IC",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1002,
"hiddenValue": 1002,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "ICE",
"hiddenValue": "ICE",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "IC",
"hiddenValue": "IC",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
}
],
"direction": "vertical",
"attributes": {},
"clickable": false
}]
function myfilter (value) {
var afterfilter = myarray.filter(data=>{
console.log(data)
return data['rows'].filter(cells=>{
return cells['cells'].filter(d=>{
return cells.toString().toLowerCase().includes("id".toLowerCase())
})
})
})
console.log(afterfilter)
}
myfilter()
Upvotes: 0
Views: 41
Reputation: 1855
you will have to deal with them separately ...
Here's something that will work.
var myarray = [{
"captions": [
{
"name": "(2)(2) Sheet1_TrainID",
"attributes": {},
"filter": true,
"sort": true
},
{
"name": "(2)(2) Sheet1_Traintype",
"attributes": {},
"filter": true,
"sort": true
}
],
"rows": [
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "ICE",
"hiddenValue": "ICE",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "ICE",
"hiddenValue": "ICE",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "IC",
"hiddenValue": "IC",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1002,
"hiddenValue": 1002,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "IC",
"hiddenValue": "IC",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "ICE",
"hiddenValue": "ICE",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "IC",
"hiddenValue": "IC",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "IC",
"hiddenValue": "IC",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1002,
"hiddenValue": 1002,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "ICE",
"hiddenValue": "ICE",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
},
{
"cells": [
{
"value": 1000,
"hiddenValue": 1000,
"type": "data",
"columnName": "(2)(2) Sheet1_TrainID"
},
{
"value": "IC",
"hiddenValue": "IC",
"type": "data",
"columnName": "(2)(2) Sheet1_Traintype"
}
]
}
],
"direction": "vertical",
"attributes": {},
"clickable": false
}]
function myfilter (value) {
return value.map(obj => {
return {captions: (obj.captions.filter(c => c.name.toString().toLowerCase().includes("id".toLowerCase()))), rows: obj.rows.map(row => {
return {cells:row.cells.filter(c => c.columnName.toString().toLowerCase().includes("id".toLowerCase()))}
})}
})
}
console.log(myfilter(myarray))
Upvotes: 1