【问题标题】:Find key for specific value on object in JS在 JS 中查找对象上特定值的键
【发布时间】:2018-03-01 10:34:22
【问题描述】:

我有一个使用 lodash _.zipObject() 函数生成的对象。所以我有 2 个数组,一个位置,一个数字。

var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147, …}

我需要根据输入值返回密钥。例如,function(304) 将返回 'Aberdeen'

我试过_.findkey(locs, 304);,但这只是返回未定义。我尝试过的任何其他尝试总是返回未定义或-1。不太确定从这里去哪里。

【问题讨论】:

    标签: javascript arrays object lodash


    【解决方案1】:

    你可以这样做:

    var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147}
    
    const getKeyByValue = (obj, value) => 
            Object.keys(obj).find(key => obj[key] === value);
    
    console.log(getKeyByValue(locs, 304));

    【讨论】:

      【解决方案2】:

      要查找键,请使用带有_.findKey() 的谓词函数:

      var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147 };
      
      var key = _.findKey(locs, function(v) {
        return v === 304;
      });
      
      console.log(key);
      <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

      您可以通过使用请求的值对_.eq() 进行柯里化来创建谓词:

      var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147 };
      
      var key = _.findKey(locs, _.curry(_.eq, 304));
      
      console.log(key);
      <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

      【讨论】:

        【解决方案3】:

        您可以简单地使用 Object.keys() 获取所有键,然后使用 .find() 函数从该数组中取出键,然后将其很好地包装在一个函数中以使其模块化。

        var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147, …}    
        Object.prototype.getKey = function(value) {    
          var object = this;    
          return Object.keys(object).find(key => object[key] === value);    
        };    
        alert(locs.getKey(304));
        

        【讨论】:

          【解决方案4】:

          您可以使用自定义函数来查找密钥:

          function findKey(dataObj, value){
          
              for(var key in dataObj){
                  if(dataObj.hasOwnProperty(key) && dataObj[key] == value){
                      return key;
                  }
              }
          
              return false;
          
          }
          
          var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147, …}
          
          console.log(findKey(locs, 304));
          

          【讨论】:

            【解决方案5】:

            使用纯 Javascript 使用 Object#keys 函数获取所有键,然后与 Array#find 函数中的元素进行比较

            const obj = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147};
            
            const key = Object.keys(obj).find(key => obj[key] === 304);
            
            console.log(key);

            使用 lodash 将谓词传入函数

            const key = _.findkey(locs, (value) => value === 304);
            

            【讨论】:

              猜你喜欢
              • 2020-01-18
              • 2014-08-21
              • 1970-01-01
              • 1970-01-01
              • 2021-09-29
              • 1970-01-01
              • 2018-06-25
              • 2017-05-26
              • 1970-01-01
              相关资源
              最近更新 更多