admin管理员组

文章数量:1173655

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'

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'

Share Improve this question edited Sep 24, 2019 at 10:37 Code Guru 15.6k30 gold badges143 silver badges210 bronze badges asked Sep 21, 2012 at 0:02 FatalKeystrokeFatalKeystroke 3,0427 gold badges25 silver badges36 bronze badges 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. – Chuck Commented Sep 21, 2012 at 0:06
Add a comment  | 

6 Answers 6

Reset to default 24
var keys = Object.keys(text);
var key = keys[0];

if (keys.length !== 1 || key !== "id" || text[key] !== "message")
    alert("Wrong object");

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?
  }
}
   const hasOnlyKey = (keyName: string, object: Object): boolean => {
        const objectKeys = Object.keys(object);

        return objectKeys.length === 1 && objectKeys[0] === keyName;
    }
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');

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...

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");

本文标签: How to determine if a Javascript object has only one specific keyvalue pairStack Overflow