Reputation: 5860
amt: "10.00"
email: "[email protected]"
merchant_id: "sam"
mobileNo: "9874563210"
orderID: "123456"
passkey: "1234"
The above is the JSON object I'm dealing with. I want to check if the merchant_id
key exists. I tried the below code, but it's not working. Any way to achieve it?
<script>
window.onload = function getApp()
{
var thisSession = JSON.parse('<?php echo json_encode($_POST); ?>');
//console.log(thisSession);
if (!("merchant_id" in thisSession)==0)
{
// do nothing.
}
else
{
alert("yeah");
}
}
</script>
Upvotes: 460
Views: 1044715
Reputation: 2123
(TL;DR: Use Object.hasOwn
now.)
The long standing highest-voted answer recommends using hasOwnProperty
. This was the best answer at the time, but it does have a number of tricky bits that can trip you up. For example, if the variable can be null
, this will cause a TypeError when you attempt to call hasOwnProperty
. Less commonly (but a symptom of the same problem), if an object could potentially have a key named "hasOwnProperty," that would shadow the function you wanted. (This could be a problem if, for example, you are parsing user-provided input.)
Because of all that, the previously correct way to call the function is this mess:
Object.prototype.hasOwnProperty.call(thisSession, "merchant_id");
In updated browsers and recent versions of node there is a new alternative that addresses these problems. Object
now has a static method named hasOwn
that addresses these pitfalls.
Object.hasOwn(thisSession, "merchant_id")
Ahh, much better. :)
If you are targeting browsers or node versions new enough to have hasOwn
, you should stop using hasOwnProperty
entirely. It is obsolete.
Upvotes: 1
Reputation: 10724
Try this
if (thisSession.hasOwnProperty("merchant_id")) {
}
the JS Object thisSession
should be like
{
amt: "10.00",
email: "[email protected]",
merchant_id: "sam",
mobileNo: "9874563210",
orderID: "123456",
passkey: "1234"
}
you can find the details here
Upvotes: 787
Reputation: 795
we can use lodash library
import _ from 'lodash';
if(_.isEmpty(merchant_id)){
// do nothing
}
else{
//do something with merchant id
}
Upvotes: 0
Reputation: 1376
(I wanted to point this out even though I'm late to the party)
The original question you were trying to find a 'Not IN' essentially.
It looks like it is not supported by the research (2 links below) that I was doing.
So if you wanted to do a 'Not In':
("merchant_id" in x)
true
("merchant_id_NotInObject" in x)
false
I'd recommend using the ! operator
if (!("merchant_id" in thisSession))
{
// do nothing.
}
else
{
alert("yeah");
}
https://linuxhint.com/use-not-in-operator-javascript/
Upvotes: 43
Reputation: 16543
This code causes esLint issue: no-prototype-builtins
foo.hasOwnProperty("bar")
The suggest way here is:
Object.prototype.hasOwnProperty.call(foo, "bar");
Upvotes: 16
Reputation: 479
you can do like this:
if("merchant_id" in thisSession){ /** will return true if exist */
console.log('Exist!');
}
or
if(thisSession["merchant_id"]){ /** will return its value if exist */
console.log('Exist!');
}
Upvotes: 37
Reputation: 92735
I change your if statement slightly and works (also for inherited obj - look on snippet)
if(!("merchant_id" in thisSession)) alert("yeah");
var sessionA = {
amt: "10.00",
email: "[email protected]",
merchant_id: "sam",
mobileNo: "9874563210",
orderID: "123456",
passkey: "1234",
}
var sessionB = {
amt: "10.00",
email: "[email protected]",
mobileNo: "9874563210",
orderID: "123456",
passkey: "1234",
}
var sessionCfromA = Object.create(sessionA); // inheritance
sessionCfromA.name = 'john';
if (!("merchant_id" in sessionA)) alert("merchant_id not in sessionA");
if (!("merchant_id" in sessionB)) alert("merchant_id not in sessionB");
if (!("merchant_id" in sessionCfromA)) alert("merchant_id not in sessionCfromA");
if ("merchant_id" in sessionA) alert("merchant_id in sessionA");
if ("merchant_id" in sessionB) alert("merchant_id in sessionB");
if ("merchant_id" in sessionCfromA) alert("merchant_id in sessionCfromA");
Upvotes: 9
Reputation: 7578
Type check also works :
if(typeof Obj.property == "undefined"){
// Assign value to the property here
Obj.property = someValue;
}
Upvotes: 27
Reputation: 51
function elementCheck(objarray, callback) {
var list_undefined = "";
async.forEachOf(objarray, function (item, key, next_key) {
console.log("item----->", item);
console.log("key----->", key);
if (item == undefined || item == '') {
list_undefined = list_undefined + "" + key + "!! ";
next_key(null);
} else {
next_key(null);
}
}, function (next_key) {
callback(list_undefined);
})
}
here is an easy way to check whether object sent is contain undefined or null
var objarray={
"passenger_id":"59b64a2ad328b62e41f9050d",
"started_ride":"1",
"bus_id":"59b8f920e6f7b87b855393ca",
"route_id":"59b1333c36a6c342e132f5d5",
"start_location":"",
"stop_location":""
}
elementCheck(objarray,function(list){
console.log("list");
)
Upvotes: 0
Reputation: 36349
There's several ways to do it, depending on your intent.
thisSession.hasOwnProperty('merchant_id');
will tell you if thisSession has that key itself (i.e. not something it inherits from elsewhere)
"merchant_id" in thisSession
will tell you if thisSession has the key at all, regardless of where it got it.
thisSession["merchant_id"]
will return false if the key does not exist, or if its value evaluates to false for any reason (e.g. if it's a literal false
or the integer 0 and so on).
Upvotes: 110