Shashank
Shashank

Reputation: 407

Check if multiple keys exists in JSON object

I am trying to validate the request object to check if specific keys exist in the object or not. I've tried lodash's has() function, but it seems that _.has() checks nested JSON. JavaScript's .hasOwnProperty() takes one key at a time. Is it possible to check an array of keys within a plain JSON object?

The object I am trying to check is:

{
    "name": "[email protected]",
    "oldPassword": "1234",
    "newPassword": "12345"
}

Upvotes: 10

Views: 21381

Answers (4)

Shariq
Shariq

Reputation: 316

You can use in operator to check if keys exist in object or not. It is quite faster than Object.keys as its complexity is O(1) as compared to Object.keys with complexity of O(n)

Example:

const neededKeys = ['oldPassword', 'name', 'newPassword'];

const obj = {
    "name": "[email protected]",
    "oldPassword": "1234",
    "newPassword": "12345"
}

console.log(neededKeys.every(key => key in obj));

Upvotes: 2

extractor
extractor

Reputation: 37

myobj =  {
    "name": "[email protected]",
    "oldPassword": "1234",
    "newPassword": "12345"
}
Print (myobj.keys() >= {"name","oldPassword","newPassword"})  

-- this will return True

Print (myobj.keys() >= {"name1","id","firstname"})  

-- this will return false

Upvotes: 0

ellipsis
ellipsis

Reputation: 12152

You can use .includes method of an array and Object.keys will give you an array of all the keys. You can compare this with an array of keys from which you want to check using a loop

var a = {
  "name": "[email protected]",
  "oldPassword": "1234",
  "newPassword": "12345"
};
var key = ["name", "oldPassword", "newPassword"];
Object.keys(a).forEach(e => key.includes(e) ? console.log(e + " found") : console.log(e + " not found"))

Upvotes: 1

baao
baao

Reputation: 73241

Simply use Object.keys and every

const neededKeys = ['oldPassword', 'name', 'newPassword'];

const obj = {
    "name": "[email protected]",
    "oldPassword": "1234",
    "newPassword": "12345"
}

console.log(neededKeys.every(key => Object.keys(obj).includes(key)));

Upvotes: 29

Related Questions