15

Javascriptオブジェクトに特定のキーと値のペアが1つしかないかどうかを判断する最も簡単な方法は何でしょうか。

たとえば、変数に格納されているオブジェクトtextにキーと値のペアのみが含まれていることを確認する必要があります'id' : 'message'

4

5 に答える 5

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

if (keys.length !== 1 || key !== "id" || text[key] !== "message")
    alert("Wrong object");
于 2012-09-21T00:16:44.407 に答える
2

列挙可能なすべてのプロパティ(つまり、オブジェクトとその[[Prototype]]チェーン上のプロパティ)について話している場合は、次のことができます。

for (var prop in obj) {

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

オブジェクト自体の列挙可能なプロパティのみをテストする場合は、次のようにします。

for (var prop in obj) {

  if (obj.hasOwnProperty(prop) && !(prop == 'id' && obj[prop] == 'message')) {
    // do what?
  }
}
于 2012-09-21T02:10:55.853 に答える
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');
于 2012-09-21T00:10:14.290 に答える
1

必要なプロパティがわかっている場合は、オブジェクトの浅いコピーを作成する方が早いのではないでしょうか。すべてを削除する必要はありません。

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

text = { id : text.id }

私があなたの質問を正しく理解したと仮定して...

于 2012-09-21T00:17:14.173 に答える
1

あなたはそれを文字列化し、それを正規表現と一致させることを試みることができます。例:

if (JSON.stringify(test).match(/\"id":\"message\"/)) {
  console.log("bingo");
}
else  console.log("not found");
于 2012-09-21T00:20:21.833 に答える