如何判断一个Javascript对象是否只有一个特定的键值对?

问题描述:

确定Javascript对象是否只有一个特定的键 - 值对最简单的方法是什么?如何判断一个Javascript对象是否只有一个特定的键值对?

例如,我需要确保存储在变量text对象只包含键值对“身份证”:“消息”

+0

键值存储区是Javascript中的对象。数组是数字键的一种特殊对象。既然你用“'id”这个关键词来谈论某件事情,那么你肯定是在讨论一个对象而不是数组。 – Chuck

+0

谢谢你纠正这一点。 – FatalKeystroke

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

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

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

如果您知道属性你想要,只是制作一个对象的浅拷贝不会更快,修剪所有东西都不需要?

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

text = { id : text.id } 

假设我理解正确你的问题......

可以字符串化,并设法用一个正则表达式匹配。例如:

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

如果你正在谈论的所有枚举的属性(即那些对象及其[[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? 
    } 
}