18

What would be the easiest way to determine if a Javascript object has only one specific key-value pair?

For example, I need to make sure that the object stored in the variable text only contains the key-value pair 'id' : 'message'

1
  • Key-value stores are objects in Javascript. Arrays are a special kind of object with numeric keys. Since you are talking about something with the key 'id', you're surely talking about an object rather than an array. Commented Sep 21, 2012 at 0:06

6 Answers 6

25
var keys = Object.keys(text);
var key = keys[0];

if (keys.length !== 1 || key !== "id" || text[key] !== "message")
    alert("Wrong object");
Sign up to request clarification or add additional context in comments.

Comments

2

If you are talking about all enumerable properties (i.e. those on the object and its [[Prototype]] chain), you can do:

for (var prop in obj) {

  if (!(prop == 'id' && obj[prop] == 'message')) {
    // do what?
  }
}

If you only want to test enumerable properties on the object itself, then:

for (var prop in obj) {

  if (obj.hasOwnProperty(prop) && !(prop == 'id' && obj[prop] == 'message')) {
    // do what?
  }
}

Comments

2
   const hasOnlyKey = (keyName: string, object: Object): boolean => {
        const objectKeys = Object.keys(object);

        return objectKeys.length === 1 && objectKeys[0] === keyName;
    }

Comments

1
var moreThanOneProp = false;
for (var i in text) {
   if (i != 'id' || text[i] != 'message') {
      moreThanOneProp = true;
      break;
   }
}

if (!moreThanOneProp)
   alert('text has only one property');

Comments

1

If you know the property you want, wouldn't be quicker to just make a shallow copy of the object, pruned of everything is not needed?

var text = {
    id : "message",
    badProperty : "ugougo"
}

text = { id : text.id }

Assuming that I've understood correctly your question...

Comments

1

you can stringify it and try to match it with a regEx. Example:

if (JSON.stringify(test).match(/\"id":\"message\"/)) {
  console.log("bingo");
}
else  console.log("not found");

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.