2

I am new to JS. I want to apply filter on array based on other arrays. For example : Filter data array based on property names from colNames and values from Values array. The colNames and Values arrays can have any length (not always 2).

var data = [{
      "name": "Tiger Nixon",
      "position": "System Architect",
      "salary": "320800",
      "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"
    }
  ]
  
  var colNames = ['name', 'position']
  var Values = ['Garrett Winters', 'Accountant']

Expected Outcome

   [{
      "name": "Garrett Winters",
      "position": "Accountant",
      "salary": "170750",
      "start_date": "2011\/07\/25",
      "office": "Tokyo",
      "rating": "8422"
    }]
3
  • what is the expected outcome Commented Feb 6, 2022 at 18:26
  • Just added in the post. Thanks Commented Feb 6, 2022 at 18:28
  • so does the colNames and Values contain key values from same object Commented Feb 6, 2022 at 18:30

1 Answer 1

1

You could filter with the iteration of all keys and check with the values.

const
    data = [{ name: "Tiger Nixon", position: "System Architect", salary: "320800", 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);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.