【问题标题】:Compare value within nested object比较嵌套对象中的值
【发布时间】:2018-10-06 12:19:51
【问题描述】:

所以我一直试图找到解决这个问题的方法,但没有成功。

const nameTest = 'testName';
const test = {
   RANDOM_ONE: {
       NAME: 'testName',
       SOMETHING: {...}
   },
   RANDOM_TWO: {
       NAME: 'Name',
       SOMETHING: {...}
   }
}

有什么简单的方法可以让我在不知道 RANDOM_X 是什么的情况下比较 nameTest 和 NAME 键以访问 NAME?

【问题讨论】:

标签: javascript object compare key


【解决方案1】:

您可以使用Object.keys() 来获取所有键的数组。然后循环遍历数组来检查属性:

const nameTest = 'testName';
const test = {
   RANDOM_ONE: {
       NAME: 'testName',
       SOMETHING: {}
   },
   RANDOM_TWO: {
       NAME: 'Name',
       SOMETHING: {}
   }
}
let testKeys = Object.keys(test);
testKeys.forEach(function(k){
  console.log(test[k].NAME == nameTest);
});

【讨论】:

    【解决方案2】:

    您可以在循环中使用 for ...:

    for (let key in test) {
      if (test[key].NAME === nameTest) {
        // do something
      }
    }
    

    【讨论】:

      【解决方案3】:

      我希望我们知道测试的 2 个级别是您的目标。您可以编写一个函数来比较名称键。

      function compare(obj, text){
       for(let x in obj){
         if(obj.x.name == text) return true;
         else ;
       }
      }
      

      然后用你的对象和字符串调用函数。

      let a = compare(test, nameTest);
      

      注意:这将比较对象以仅确定它是否包含 nameTest 字符串。

      【讨论】:

        【解决方案4】:
        var obj= test.filter(el){
            if(el.NAME==nameTest)
            {
                return el;
            }
         }
        var x= obj!=null?true:false;
        

        【讨论】:

        • 虽然这可能会回答问题,但最好添加一些关于此答案如何有助于解决问题的描述。请阅读How do I write a good answer 了解更多信息。
        【解决方案5】:

        你可以使用find

        find 方法对每个索引执行一次回调函数 直到找到一个回调返回真值的数组。如果 找到这样的元素,find 立即返回该元素的值 元素。否则,find 返回 undefined。

        所以它比使用forEach 循环整个对象更节省内存,因为如果回调函数找到值,find 会立即返回。打破 forEach 的循环是不可能的。在文档中:

        没有其他方法可以停止或中断 forEach() 循环 抛出异常。如果你需要这样的行为,forEach() 方法 是错误的工具。

        1.如果你想得到整个对象

        var nameTest = 'testName';
        var test = {
           RANDOM_ONE: {
               NAME: 'testName',
               SOMETHING: {}
           },
           RANDOM_TWO: {
               NAME: 'Name',
               SOMETHING: {}
           }
        };
        
        function getObjectByNameProperty(object, property) {
            var objectKey = Object.keys(object)
                .find(key => object[key].NAME === property);
            return object[objectKey];
        }
        
        var object = getObjectByNameProperty(test, nameTest);
        console.log(object);

        2。如果您只想测试对象是否具有给定的名称值

        var nameTest = 'testName';
        var test = {
           RANDOM_ONE: {
               NAME: 'testName',
               SOMETHING: {}
           },
           RANDOM_TWO: {
               NAME: 'Name',
               SOMETHING: {}
           }
        };
        
        function doesObjectHaveGivenName(object, nameValue) {
            var objectKey = Object.keys(object)
                .find(key => object[key].NAME === nameValue);
            return objectKey ? true : false;
        }
        
        console.log( doesObjectHaveGivenName(test, nameTest) );

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-12
          • 2021-06-02
          • 2020-01-17
          • 2021-12-04
          • 1970-01-01
          • 1970-01-01
          • 2012-02-03
          相关资源
          最近更新 更多