Home > Software design >  filter array based on another nested array
filter array based on another nested array

Time:02-08

In the code below, I apply filter on array based on other arrays. For example : Filter data array based on property names from cols and values from values array.

const
    data = [{ name: "Tiger Nixon", position: "Accountant", salary: 10800, start_date: "2011\\/04\\/25", office: "Edinburgh", rating: 5421 }, { name: "Garrett Winters", position: "Accountant", salary: 170750, start_date: "2011\\/07\\/25", office: "Tokyo", rating: 8422 }, { name: "Garrett Winters", position: "Analyst", salary: 170750, start_date: "2011\\/07\\/25", office: "Tokyo", rating: 8422 }, { name: "Ashton Cox", position: "Junior Technical Author", salary: 86000, start_date: "2009\\/01\\/12", office: "San Francisco", rating: 1562 }, { name: "Cedric Kelly", position: "Senior Javascript Developer", salary: 433060, start_date: "2012\\/03\\/29", office: "Edinburgh", rating: 6224 }],
    cols = ['name', 'position'],
    values = ['Garrett Winters', 'Accountant'],
    result = data.filter(o => cols.every((k, i) => o[k] === values[i]));
    
    console.log(result);

The above code is working fine. But if I have nested array for numeric in values (see below). I want to accommodate this condition salary >= nestedarray[0] && salary <= nestedarray[1]

cols = ['salary', 'position']
values = [[50000,500000], 'Accountant']

I tried this but not working -

result = data.filter(o => cols.every((k, i) => if(Array.isArray(values[i]) {o[k] >= values[i][0] && o[k] <= values[i][1] } else {o[k] === values[i]}))

CodePudding user response:

You have to use the ternary operator to perform a conditional in an expression, not if.

result = data.filter(o => cols.every((k, i) => 
    Array.isArray(values[i]) ? 
        o[k] >= values[i][0] && o[k] <= values[i][1] :
        o[k] === values[i]
    ));
  •  Tags:  
  • Related