【问题标题】:How to determine if a Javascript object has only one specific key-value pair?如何确定一个 Javascript 对象是否只有一个特定的键值对?
【发布时间】:2012-09-21 00:02:14
【问题描述】:

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

例如我需要确保变量text中存储的对象只包含键值对'id' : 'message'

【问题讨论】:

  • 键值存储是 Javascript 中的对象。数组是一种带有数字键的特殊对象。由于您在谈论带有键 'id' 的内容,因此您肯定在谈论对象而不是数组。
  • 感谢您的纠正。

标签: javascript


【解决方案1】:
var keys = Object.keys(text);
var key = keys[0];

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

【讨论】:

    【解决方案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?
      }
    }
    

    【讨论】:

      【解决方案3】:
      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');
      

      【讨论】:

        【解决方案4】:

        如果您知道您想要的属性,那么只制作对象的浅表副本会不会更快,不需要修剪所有内容?

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

        假设我已正确理解您的问题...

        【讨论】:

          【解决方案5】:

          您可以将其字符串化并尝试将其与正则表达式匹配。示例:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-12-16
            • 2017-02-19
            • 2016-12-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-06-12
            • 1970-01-01
            相关资源
            最近更新 更多