代码之家  ›  专栏  ›  技术社区  ›  user944513

如何在Javascript中不区分大小写地设置对象中的值?

  •  4
  • user944513  · 技术社区  · 8 年前

    键值相同 首都

    var a = {
        'perm city' :{
             value:'asda'
        }
    }
    
    if((a['perm city'] && a['perm city'].value) ||  (a['Perm City'] && a['Perm City'].value) ||  (a['PERM CITY'] && a['PERM CITY'].value)){
        a['PERM CITY'] = 'DADASDASD'
    }
    

    在我的例子中,我想设置 perm city 但我不知道它会变成什么样。

    6 回复  |  直到 8 年前
        1
  •  4
  •   Thatkookooguy eglasius    8 年前

    您需要通过将密钥与小写版本的密钥进行比较来搜索密钥。 如果找不到键,请将该键设置为默认的小写值: perm city

    const data = {
      'perm city': {
        value: 'asda'
      }
    };
    
    console.log(data);
    
    const defaultKey = 'perm city';
    
    const keys = Object.keys(data);
    
    let foundKey = keys.find((key) => key.toLowerCase() === defaultKey);
    
    foundKey = foundKey || defaultKey;
    
    data[foundKey] = 'PIZZA';
    
    console.log(data);
        2
  •  2
  •   Jordan Enev    8 年前

    我将首先规范化所有键以遵循相同的模式(所有键都是小写的),然后处理规范化的数据:

    const data = {
     'Key': 1,
     'test': 2,
     'Perm city': 3
    }
    
    // Normalize the data keys
    Object.keys(data)
      .forEach(key => {
        // Normalize the key
        data[key.toLowerCase()] = data[key]
        
        // Delete the denormalized key with its value
        delete data[key]
      })
    
    console.log(data['perm city'], data)
        3
  •  0
  •   Vishnudev Krishnadas    8 年前

    Object.keys 对象 ,然后通过不区分大小写的搜索找到所需的密钥。使用“找到”键指定给“原始” 对象

    let obj = { "X": 1 };
    let key_to_find = "x";
    key = Object.keys(obj).find(function(element) {
      return element.toLowerCase() == key_to_find;
    });
    obj[key||key_to_find] = "new value";
    
        4
  •  0
  •   Nico    8 年前

    您可以尝试使用函数设置对象的值:

     var a = {
        'perm city' :{
         value:'asda'
        }
     }
    
    
        function changeValue(obj,prop,value) {
            let propUp = prop.toUpperCase();
            let propDown = prop.toLowerCase();
            if (obj.hasOwnProperty(propUp)) {
              obj[propUp] = value;
            }
            else if (obj.hasOwnProperty(propDown)) {
                    obj[propDown] = value;
            }
            else {
                    console.log("No prop found in low or Uppercase")
            }
            console.log(obj);
        }
        changeValue(a,"PERM CITY","NEW");
    

    新的目标是:

    {
            'perm city' :{
             value:'NEW'
            }
         }
    
        5
  •  0
  •   Alice Oualouest    8 年前

    find 所有对象键中的相关键

    let relevantKey = Object.keys( a ).find( key => {
        let s = 'PERM CITY'
        return (key.toLowerCase( ) === s.toLowerCase( ) )
    })
    
        6
  •  0
  •   Peter Seliger    8 年前

    function assignKeyValueCaseInsensitively(type, key, value) {
      if ((type != null) && (typeof key === 'string')) {
    
        var isKeyRespondsInitially = false;
        var regXKey = RegExp(key, 'i');
    
        Object.keys(type).forEach(function (key) {
          if (regXKey.test(key)) {
            isKeyRespondsInitially = true;
    
            type[key] = value;
          }
        });
        if (!isKeyRespondsInitially) {
    
          type[key] = value;
        }
      }
      return type;
    }
    
    var a = {
      'perm city' : 'foo',
      'PERM CITY' : 'bar',
      'Perm City' : 'baz',
      'permCity' : 'biz'
    };
    var b = {
      'permCity' : 'biz'
    }
    
    assignKeyValueCaseInsensitively(a, 'pERM citY', 'boz');
    assignKeyValueCaseInsensitively(b, 'pERM citY', 'boz');
    
    console.log('a : ', a);
    console.log('b : ', b);
    .as-console-wrapper { max-height: 100%!important; top: 0; }