I have an array of objects. i want to filter array based the object has the condition.
my array is as follow :
var data = [
{
"name": "nitin",
"r_id": "1",
"t_id": "4"
},
{
"name": "test",
"r_id": "2",
"t_id": "3"
},
{
"name": "test1",
"r_id": "2",
"t_id": "4"
},
{
"name": "test3",
"r_id": "3",
"t_id": "3"
},
{
"name": "test2",
"r_id": "1",
"t_id": "1"
}]
and my object is as follows :
var obj = {
role:['1','2'],
type:['1','3']
}
where r_id is the role id and t_id is the type id
so i want the results whose role id is in 1 or 2 AND type id is in 1 or 3.
so mathematically role_id && type_id ((1||2)&&(1||3))
my output should like:
var result = [
{
'name':'test',
'r_id':2,
't_id':3,
},
{
'name':'test2',
'r_id':1,
't_id':1,
}];
var data = [ { "name": "nitin", "r_id": "1", "t_id": "4" }, { "name": "test", "r_id": "2", "t_id": "3" }, { "name": "test1", "r_id": "2", "t_id": "4" }, { "name": "test3", "r_id": "3", "t_id": "3" }, { "name": "test2", "r_id": "1", "t_id": "1" }] var obj = { role:['1','2'], type:['1','3'] } let result = data.filter(item=>{ return obj.role.indexOf(item.r_id) > -1 && obj.type.indexOf(item.t_id) > -1 }) console.log(result)
You just need to iterate your data
and see if the keys ( r_id
and t_id
) are present in the obj
(in the respective arrays). For this you can use Array.filter
var data = [{"name":"nitin","r_id":"1","t_id":"4"},{"name":"test","r_id":"2","t_id":"3"},{"name":"test1","r_id":"2","t_id":"4"},{"name":"test3","r_id":"3","t_id":"3"},{"name":"test2","r_id":"1","t_id":"1"}] var obj = { role:['1','2'], type:['1','3'] } var result = data.filter(function(element){ return obj.role.indexOf(element.r_id) !== -1 && // element has valid role obj.type.indexOf(element.t_id) !== -1 // element has valid type }) console.log(result)
var data = [ { "name": "nitin", "r_id": "1", "t_id": "4" }, { "name": "test", "r_id": "2", "t_id": "3" }, { "name": "test1", "r_id": "2", "t_id": "4" }, { "name": "test3", "r_id": "3", "t_id": "3" }, { "name": "test2", "r_id": "1", "t_id": "1" }] var obj = { role:['1','2'], type:['1','3'] } var filterItems = data.filter(function(o){ return obj.role.indexOf(o.r_id) != -1 && obj.type.indexOf(o.t_id) != -1; }); console.log(filterItems);
You could change obj
a bit, for corresponding property names in the data, you have, then use Array#filter
and check with Array#every
for wanted item.
var data = [{ name: "nitin", r_id: "1", t_id: "4" }, { name: "test", r_id: "2", t_id: "3" }, { name: "test1", r_id: "2", t_id: "4" }, { name: "test3", r_id: "3", t_id: "3" }, { name: "test2", r_id: "1", t_id: "1" }], obj = { r_id: ['1', '2'], t_id: ['1', '3'] }, keys = Object.keys(obj), result = data.filter(function (o) { return keys.every(function (k) { return obj[k].indexOf(o[k]) !== -1; }); }); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.