Reputation: 83
In Array I used name filter on the (name,desc). and I used flag. I tried using name I applied filter for name or desc and flag. but I am not getting two records. I tried to filter name for (name,desc) and flag. Below is my code
var data = [
{
name: "hello",
domain: "domain1",
subdomain: "subdomain1",
type: "yes"
},
{
name: "hello",
domain: "domain2",
subdomain: "subdomain6",
type: "no",
desc: null,
flag:null
},
{
name: "helloo",
domain: "domain2",
subdomain: "subdomain6",
type: "no",
desc: "test",
flag:"yes"
},
{
name: "test1",
domain: "domain2",
subdomain: "subdomain6",
type: "no",
desc: "hello",
flag:"yes"
}
];
var name = "he";
var flag = "yes";
var res = data.filter((d)=>{return ( (name.length && d.name) ? d.name.toLowerCase().indexOf(name.toLowerCase()) > -1: "" || (name.length && d.desc) ? d.desc.toLowerCase().indexOf(name.toLowerCase()) > -1: "") && (flag.length && d.flag)
? d.flag.includes(flag)
: ""});
console.log(JSON.stringify(res));
name value I tried to filter (name , desc) and flag. but getting name and flag, unable to get desc having the text "he" I need to get two records actually {
name: "helloo",
domain: "domain2",
subdomain: "subdomain6",
type: "no",
desc: "test",
flag:"yes"
},
{
name: "test1",
domain: "domain2",
subdomain: "subdomain6",
type: "no",
desc: "hello",
flag:"yes"
}
Upvotes: 2
Views: 50
Reputation: 18109
This should serve the purpose. Club the relevant conditions:
var data = [{
name: "hello",
domain: "domain1",
subdomain: "subdomain1",
type: "yes"
},
{
name: "hello",
domain: "domain2",
subdomain: "subdomain6",
type: "no",
desc: null,
flag: null
},
{
name: "helloo",
domain: "domain2",
subdomain: "subdomain6",
type: "no",
desc: "test",
flag: "yes"
},
{
name: "test1",
domain: "domain2",
subdomain: "subdomain6",
type: "no",
desc: "hello",
flag: "yes"
}
];
var name = "he";
var flag = "yes";
var res = data.filter((d) => {
return d.name && d.desc && d.flag && (d.name.toLowerCase().indexOf(name.toLowerCase()) > -1 || d.desc.toLowerCase().indexOf(name.toLowerCase()) > -1 && d.flag.includes(flag))
});
console.log(JSON.stringify(res));
Upvotes: 0
Reputation: 15851
Sa name && description are always present, you are making useless checks. Check out below if it is the result you are looking for:
var data = [
{
name: "hello",
domain: "domain1",
subdomain: "subdomain1",
type: "yes"
},
{
name: "hello",
domain: "domain2",
subdomain: "subdomain6",
type: "no",
desc: null,
flag:null
},
{
name: "helloo",
domain: "domain2",
subdomain: "subdomain6",
type: "no",
desc: "test",
flag:"yes"
},
{
name: "test1",
domain: "domain2",
subdomain: "subdomain6",
type: "no",
desc: "hello",
flag:"yes"
}
];
var name = "he";
var flag = "yes";
var res = data.filter(d => d.name.indexOf('he') > -1 || d.flag === 'yes');
console.log(JSON.stringify(res.length));
console.log(JSON.stringify(res));
Upvotes: 2