Kazi
Kazi

Reputation: 1553

Javascript filter function is not working proeprly

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

Answers (1)

anees
anees

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

Related Questions